学习目标:
URL语法,以及各种URL组件的含义及其所做的工作;
很多Web客户端都支持的URL快捷方式,包括相对URL和自动扩展URL;
URL编码和字符规则;
支持各种因特网信息系统的常见URL方案;
URL的未来,包括URN。
- URL语法,以及各种URL组件的含义及其所做的工作:
HTTP规范将更通用的URI作为资源标识符,但实际上使用的只是URI的子集URL。
不同的协议使用的URL并不相同,但都建立在以下9部分构成的通用格式上:
<scheme>://<user>:<password>@<host>:<port>/<path>;<param>?<query>#frag
组件 描述
scheme 访问服务器使用的协议
user 用户名
password 密码
host 主机域名或IP地址
port 端口号
path 服务器上资源的本地名
param 参数。形式为名/值对
query 查询参数
frag 一小片或一部分资源的名字
对于HTTP而言,URL的格式为:
<scheme>://<host>:<port>/<path>?<query>#frag
其中,scheme为http或者https(不区分大小写),host必须存在,scheme=http时,port默认为80,scheme=https时,port默认为443,path默认为/,剩下的可能存在。
-
很多Web客户端都支持的URL快捷方式,包括相对URL和自动扩展URL:
相对URL:
相对URL是缩略形式的URL,是完整URL的片段或一小部分,需要被转换为完整的URL。
转换处理的第一步是寻找基础URL。有些资源能显示提供,例如HTML文档中的<BASE>
标记。如果没有显示指定,就默认基础URL为它所属资源的URL.
然后使用相对URL继承基础URL,继承的原则是除了<path>
之外的所有组件,如果没有就继承基础URL中的。对于<path>
组件,如果组件前有./的前缀,就用基础URL中的<path>
组件替换,不然就保持原样。
自动扩展URL:
自动扩展URL有两种方式:1.主机名扩展。特点是往输入的不完整的URL中插入各种常用参数,努力使URL变得完整合法。2.历史扩展。实现方式是保存下历史访问的URL,当输入新的URL时,与历史记录中的URL做前缀匹配,并提供部分匹配成功的选项供用户选择。 -
URL编码和字符规则:
URL是可移植的,需要统一的命名Internet上的所有资源。它会接触到许多不同的协议。因此,URL的命名需要注意避开所有协议中的保留字符。
因此,对于URL,我们希望仅使用通用的安全字母表中的字符。但在部分情况下,有使用安全字符之外的二进制数据和字符的需要,对于这部分字符,我们希望能转码为安全字符,再进行传输。
URL保留字符集
编码机制:对于不安全的字符,使用一个百分号(%)后面跟着表示字符ASCII码的十六进制数。 -
支持各种因特网信息系统的常见URL方案:
http http://<host>:<port>/<path>?<query>#frag
https https://<host>:<port>/<path>?<query>#frag
mailto mailto:<user>@email.com?<query>
ftp ftp://<user>:<password>@<host>:<port>/<path>;<param>
rtsp rtsp://<user>:<password>@<host>:<port>/<path>
rtspu rtspu://<user>:<password>@<host>:<port>/<path>
file file://<host>/<path>
news news:<newsgroup> or news://<news-article-id> //自身的信息不足以对资源进行定位,需要指定服务器
- URL的未来,包括URN:
URL的缺陷:URL表示的是实际的地址,当资源被移走了,URL就失效了。
为了弥补这个问题,URN被提出,使用URN(统一资源名)代替URL。大致思想就是在搜索资源的时候引入一个中间层,由中间层对实际的URL进行登记和跟踪。但是从URL转换为URN是一个巨大的工程,而URL已经广为人知,URN也就还不可能替代URL。