对于URL转码问题的理解:
URL转码分为编码和解码两个过程。
URL编码的理解:
首先:我们需要想想URL作为一个请求,需要描述那几个部分:
服务器的地址
资源地址
-
请求的参数
这个和到某地找东西是非常类似的。举例:
假设在远端的服务器的ip地址为123.231.45.3.端口号为8080.然后在文件/red+/blue/下有N个文件, 你想查询符合某个条件q的
那么URL 就应该像下面这样:
http://123.231.45.3:8080/red+/blue/?q=query
格式为:协议+ip地址+端口号+文件+ 查询条件
至于为什么是这种格式,这个是由之前的专家协商的, 这样大家在开发程序就有了一个统一的约定。
(具体的例子可以看看参考文献中的一个表格)
其次,我们看看URL中用于分割各个部分的分割符。
Scheme://host address:port/file;path parameters?queur paprameter
其中/后面是path
;后面是路径参数
? 后面是查询条件
有了上面的约定 ,在服务器端收到URL之后,根据相应的特殊字符进行分割就可以得到Path路径,Path参数, 和查询条件,正确解析之后就可以进行取数据返回用户了。
下面我们来考虑这样一个情况:假设一个图片的名字to_be_or_not_to_be?.jpg时,对其进行请求,会出现什么情况。
上面在路径部分出现了?所以服务器就会解析错误,因为前面我们说过服务器是按照“?”对URL划分出查询部分的。
第三:如何解决上面的问题呢?这就需要对在Path中(也就是to_be_or_not_to_be?.jpg)的?符号进行编码转化,将路径部分的?编码为其他的字符。
(编码)转化规则如下:(可以当做一个黑盒子)
(注:一般使用utf-8编码方式)
将特殊字符利用某编码方式进行编码,之后在前面加上%。
转化之后如下:to_be_or_not_to_be%3F.jpg
这样当转码之后的URL发送到服务器段时,就不会出现解析上的歧义了。
URL解码
URL解码就是URL编码相反的过程,将编码后的URL解码显示在浏览器的地址栏内,给用户看。
上面是最简单的例子解释URL转码存在的理由,至于其他的更深一步的理解可以参考下面的参考文献。不过一般不做开发,可以忽略,。
参考文献:
英文版:https://www.talisman.org/~erlkonig/misc/lunatech%5Ewhat-every-webdev-must-know-about-url-encoding/