URI介绍
URI(Uniform Resource Identifier),是统一资源标识符的缩写,是一个用于标识某一个Web资源名称的字符串,该标识允许用户对任何资源通过特定的协议进行交互。Web上可用的每种资源,如:HTML、图像、视频和音乐等资源,都由一个统一资源标识符进行标识。URI一般由三部分组成:
● 访问资源的命名机制
● 存放资源的主机名
● 资源自身的名称,由路径标识,着重强调于资源
URL介绍
URL(Uniform Resource Locator),统一资源定位符的缩写,URL是一种特殊类型的URI,包含了用于查找某个资源的全部信息。URL一般由三部分组成:
● 协议类型
● 主机的IP地址(可以包含端口号)
● 资源路径
HTTP之URL
HTTP使用统一资源定位符URL来传输数据和建立连接,以下面这个URL为例,为大家介绍下URL的各部分组成:
http://www.itxdl.cn:8080/news/index.jsp?boardID=5&ID=24618&page=1#name
从上面的URL中可以看出,一个完整的URL包括以下几部分:
● 协议部分:该URL的协议部分为“http”,这代表网页使用的是HTTP协议,在Web中可以使用多种协议,如HTTP、FTP等等,在协议后面的“//”为分隔符。
● 域名部分:该URL的域名部分为www.itxdl.cn。一个URL中,也可以使用IP地址作为域名使用。
● 端口部分:跟在域名后面的是端口号,域名和端口号之间使用“:”作为分隔符。端口号不是一个URL必须的部分,如果省略端口号部分,将采用默认端口号。
● 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分,本例中的虚拟目录是“/news/”。
● 文件名部分:从域名后的最后一个“/”开始到“?”位置,是文件名部分,如果没有“?”,则从域名后的最后一个“/”开始到“#”位置,是文件名部分,如果没有“?”和“#”,那么从域名的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.jsp”。文件名也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。
● 锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分。
● 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
URL编码
如果一样东西需要编码,那么就说明这样的东西并不适合进行传输。原因是多种做样的,如长度过大,包含隐私数据等,对于URL来说,之所以要进行编码,是因为URL中有些字符会引起歧义。
例如,URL中的参数使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如username=snape&password=123,但是如果value中的字符串包含了=或&,那么一定会造成接收URL的服务器解析错误,因此必须将引起歧义的字符进行转义,也就是进行编码。
又如,URL中的编码格式采用的是ASCII码,而不是Unicode,也就是说不能在URL中包含任何非ASCII字符,例如中文。
在URL中是使用百分号编码的形式对中文进行编码的,因为使用百分号编码的方式非常简单,使用%加上两位十六进制数值即可。URL编码默认使用的字符集是US-ASCII,例如a在US-ASCII码中对应的十六进制形式是0x61,那么URL编码之后得到的就是%61,我们在浏览器地址栏中输入https://www.baidu.com/s?wd=%61,实际上就等同于在百度中搜索a了。
对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的十六进制数值,然后对每个字符执行百分号编码。对于Unicode字符,使用utf-8对其进行编码得到相应的十六进制数值,然后对每个字节执行百分号编码,如“中文”使用utf-8字符集得到的十六进制形式为“0xE4 0xB8 0xAD 0xE6 0x96 0x87”,经过“URL”编码之后得到"%E4%B8%AD%E6%96%87"。
原文地址:https://blog.51cto.com/14311187/2389392