你所不知道的 URL
0.说明
第一幕
产品
:大叔
有用户反映账户不能绑定公众号。大叔
:啊咧咧?怎么可能,我看看?大叔
:恩?这也没问题啊,魏虾米。大叔
:还是没问题啊,挖叉类。大叔
:T T,话说产品姐姐
是不是Java
提供接口的时候,没有对URL
进行encodeURI
。产品
:啊咧咧?我问问看?
第二幕
大叔
:翔逼
你给我过来!翔逼
:啊咧咧?怎么了大叔
?大叔
:知道在URL
中的+
有时候会变成什么吗?翔逼
:啊咧咧?不是+
吗?大叔
:知道在URL
中的空格
有时候会变成什么吗?翔逼
:啊咧咧?不是空格
吗?大叔
:还不赶快自己去查查看!别也成了挖坑型选手。
1.杀手兄弟 - 加号与空格
0.说明
维基百科中关于百分号编码
中有段说明。
当HTML表单中的数据被提交时,表单的域名与值被编码并通过HTTP的GET或者POST方法甚至更古远的email把请求发送给服务器。这里的编码方法采用了一个非常早期的通用的URI百分号编码方法,并且有很多小的修改如新行规范化以及
把空格符的编码"%20"替换为"+"
. 按这套方法编码的数据的MIME类型是application/x-www-form-urlencoded, 当前仍用于(虽然非常过时了)HTML与XForms规范中. 此外,CGI规范包括了web服务器如何解码这类数据、利用这类数据的内容。
1.GET - 简单的在浏览器中测试
URL带有加号
在浏览器里输入URLhttps://www.baidu.com/s?wd=翔逼+大叔
,这时候百度搜索框中出现的是翔逼 大叔
,搜索框
中+
神奇的变成了空格
。
URL带有空格
在浏览器里输入URLhttps://www.baidu.com/s?wd=翔逼 大叔
,这时候百度搜索框中出现的是翔逼 大叔
,URL
中空格
的变成%20
。
URL带有%2B
在浏览器里输入URLhttps://www.baidu.com/s?wd=翔逼%2B大叔
,这时候百度搜索框中出现的是翔逼+大叔
,搜索框
中%2B
的变成+
。
2.POST - 简单的PHP测试
代码
<?php
echo $_POST['word'];
POSTMAN 发送请求
POST /1.php HTTP/1.1
Host: 127.0.0.1
Cache-Control: no-cache
Postman-Token: fed5740c-aceb-0f57-edc9-cf42a275b35a
Content-Type: application/x-www-form-urlencoded
word=%2B%2B%2B+%2B%2B%2B
输出
+++ +++
2.孕妇 - URL中的URL
0.说明
在社交登录或微信公众号等时候,我们常常会在URL
中使用到回调地址来处理验证成功后的页面跳转。
例如:
回调地址为:
lionis.taroball.com?username=lionis&sex=man
这时候在
URL
中附加回调信息时地址变为
www.xxx.com?redirect=lionis.taroball.com?username=lionis&sex=man
。
这个时候尴尬的问题出现了,sex=man
在这个时候变成了www.xxx.com
的参数了,而不是lionis.taroball.com
的参数了。
这个时候就需要对回调信息进行encodeURL
。
2.代码
<?php
// 文件名为test.php
echo $_GET['redirect'];
3.有 encodeURL
URL
localhost/test.php?redirect=lionis.taroball.com%3Fusername%3Dlionis%26sex%3Dman
输出
lionis.taroball.com?username=lionis&sex=man
4.无 encodeURL
URL
localhost/test.php?redirect=lionis.taroball.com?username=lionis&sex=man
输出
lionis.taroball.com?username=lionis
3.结论
GET
如果想在URL中使用
+
需要对URL
进行encodeURL
,把+
编码成%2B
。在服务端渲染页面的时候,对
URL
需要encodeURL
。在客户端发送请求的时候,
javascript
需要使用正则
来进行替换
。在服务端接受参数的时候,对
关键字
使用decodeURL
。对于
URL
中的URL
也需要进行encodeURL
POST
POST
的Content-Type
默认是application/x-www-form-urlencoded
,顾名思义对URL
进行了encodeURL
。想要了解更多有关
POST
可以看我之前写的你所不知道的POST。
你所不知道的 URL的更多相关文章
- 你所不知道的 CSS 滤镜技巧与细节
承接上一篇你所不知道的 CSS 动画技巧与细节,本文主要介绍 CSS 滤镜的不常用用法,希望能给读者带来一些干货! OK,下面直接进入正文.本文所描述的滤镜,指的是 CSS3 出来后的滤镜,不是 IE ...
- 你所不知道的 CSS 阴影技巧与细节
关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow 的用法. 最近一个新的项目,CSS-Ins ...
- 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例
你所不知道的 CSS 阴影技巧与细节 关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- 你所不知道的setInterval
在你所不知道的setTimeout记载了下setTimeout相关,此篇则整理了下setInterval:作为拥有广泛应用场景(定时器,轮播图,动画效果,自动滚动等等),而又充满各种不确定性的这set ...
- 你所不知道的setTimeout
JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...
- 你真的会玩SQL吗?你所不知道的 数据聚合
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- 你所不知道的linq(二)
上一篇说了from in select的本质,具体参见你所不知道的linq.本篇说下from...in... from... in... select 首先上一段代码,猜猜结果是什么? class P ...
- 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧
目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...
随机推荐
- java基础知识回顾之java Thread类学习(九)--wait和notify区别
wait和sleep区别: 相同点:调用wait,sleep方法都可以是线程进入阻塞状态,让出cpu的执行权. 不同点:1.sleep必须指定时间,但是wait方法可以指定时间,也可以不指定时间. ...
- 自动装配【Spring autowire】
public class AutoWiringDao { private String daoName; public void setDaoName(String daoName) { this.d ...
- jquery通过ajax-json访问java后台传递参数,通过request.getParameter获取不到参数的说明
http://m.blog.csdn.net/blog/eyebrother/36007145 所以当后台通过request.getParameter("name");对参数值的作 ...
- 创业草堂之一:创业的Idea是怎样产生的?
“创业”,在很多人的想象中,就是两个小伙子在车库里.或者在学生寝室里,侃出了一个Idea,然后找到了一个投资人或VC,经过几句话讲解,VC拍手叫绝,10钟内当场拍板,砸下了2000万美金,然后两小伙子 ...
- PowerDesigner中转换物理模型时的命名转换
原文:PowerDesigner中转换物理模型时的命名转换 最近在使用PowerDesigner建模数据库,在使用中积累了一些遇到的问题和解决办法,记录下来,希望对遇到同样问题的朋友有所帮助. 早 期 ...
- C# Java间进行RSA加密解密交互(三)
原文:C# Java间进行RSA加密解密交互(三) 接着前面一篇C# Java间进行RSA加密解密交互(二)说吧,在上篇中为了实现 /** * RSA加密 * @param text--待加密的明文 ...
- 嵌入式控制(0)----linux系统网络配置
嵌入式系统本身具有操作系统的全部属性,但收到其硬件条件制约,故需要主机通过串口/网口等方式与其通信.今日下午的工作主要是linux系统的ssh传输配置,nfs服务器配置,tftp服务器配置. ip的概 ...
- Tomcat的SessionID引起的Session Fixation和Session Hijacking问题
上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hi ...
- Zookeeper集群和HBase集群
1.部署Zookeeper集群(hadoop0\hadoop1\hadoop2) 1.1.在hadoop0上解压缩Zookeeper-3.4.5.tar.gz 1.2.执行命令 cp conf/zoo ...
- Android权限安全(13)4.3前后root原理不同
在JB MR2(4.3)之前 Apk内部可以通过Java的Runtime执行一个具有Root-setUID的可执行文件而 提升Effective UID来完成一些特权操作,典型的Root包中的su就是 ...