内容提要

  • 本章讲解了URI(统一标识符)严格来说,这一章是介绍URL(统一资源定位符)的!分别介绍了URL是由那些组件构成、每个组件代表的含义是什么、浏览器是如何解析每个组件的以及从URL的完成性和安全性来说如何进行URL不安全字符进行转义。当然最后还简单介绍了URI的另一个子类URN(统一资源名)。

URI的分类

  • URI(统一资源标识符)由URL(统一资源定位符)和URN(统一资源名)两个子集构成。URL是从资源的位置来定义一个资源的,比如在“中国三东的一只小狗”和在“中国广东的一只小狗”就分别定义了两只不同的狗。而URN是从资源的名字来定义的,比如小明和小李就分别定义了两个人。目前的网络架构来说,大部分都是URL。URL的缺点就是如果资源的位置发生了改变,那么资源也就找不到了,而URN正是解决这个问题的,因为URN不受位置的限制,它只受名字的管理,因为对于URN来说,一个资源的名字是唯一的,所以无论资源移动到什么地方,都能通过名字定位到资源。从某种意义上来说,URN是URI的未来趋势,但是URN的实现需要一个中间架构来满足这种位置到名字的映射,所以要完成从URL到URN的过度,显然是一个工程量的过程,如果不是URL到了不能用的时候,URN的实现需要很长的时间,幸运的是现在URL架构还是很好的满足网络需求的!

URL的语法

  • URL的语法描述的是URL由哪些组件构成,以及这些组件是怎么组合成一个URL,中间由什么符号连接,每个组件代表什么等!其格式如下:
  1. <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

其中:

scheme:方法描述了请求资源时用了什么协议,用“:”与url其它部分隔开;

user:用户名描述了访问是带的用户名;

password:密码描述了用户名后面可能跟的密码,用“:”跟用户名隔开;

host:主机描述了网站主机名或ip地址,如果前面有用户名和密码,用@分开;

post:服务器当前正在监听的端口,http默认为80,https默认为443;

path:路劲描述了资源在服务器上的位置,用‘/’跟前面部分隔开;

params:参数描述了请求需要附加的参数,用“;”与其他部分隔开;

query:查询是用来激活服务器程序去执行某些操作,比如查询数据库等,用“?”与其余部分隔开;

frag:片段只在客户端使用,不发送到服务器端;

URL快捷方式

  • url快捷方式描述了一种程序如何通过相对地址解析处绝对地址的过程以及在浏览器地址栏输入部分url浏览器自动补全主机名的一种机制!

  • 相对地址转换为绝对地址:首先会根据一个基础地址来得出协议、主机名、端口等!基础地址可以通过base标签显示定义,也可以由当前所在资源的地址得出!相关接口通过继承的方式附在相对地址上,最后得到绝对地址。

  • 浏览器扩展地址主要通过主机名扩展和历史扩展等方式实现自动地址补全!

url编码

Q:为什么需要编码?

A:主要从url的一致性、安全性、以及完整性来强调需要对url字符进行编码。比如因为一个url连接的两端可能出现的机器种类很多,为了让大家都能够解析出一个相同的url,所以有必要对某些不安全的url字符进行转义。

Q:url字符集由什么编码构成?

A:早前的url是有US-ASCII码编码,但是随着网络在全世界的流行,有很多字符是US-ASCII不能编码的,因为US-ASCII码最多只能编译127个字符。通过转义序列,就可以用US-ASCII字符集的有限子集对任意字符值或数据进行编码了。

Q:编码机制?

A:为了避开安全字符集表示法带来的限制,人们设计了一种编码机制,用来在URL中表示各种不安全的字符。这种编码机制就是通过一种“转义”表示法来表示不安全字符的,这种转义表示法包含一个百分号(%),后面跟着两个表示字符的ASCII码的十六进制数。

Q:那些字符不建议在URL里面使用?

A:在URL中,有几个字符被保留起来,有着特殊的含义。有些字符不在定义的US-ASCII可打印字符集中。还有些字符会与某些因特网网关和协议产生混淆,因此不赞成使用,比如“%”。