URL与资源(http权威指南)

URL与资源
URL就是因特网资源的标准化名称。URL指向每一条电子信息,告诉你他们位于何处,以及如何与之进行交互。

2.1 浏览因特网资源
URL是浏览器寻找信息时所需的资源位置。URL是人们对HTTPP和其他协议的最常用访问点:一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报文来获取人们所期望的资源。
URI是一类更通用的资源标识符,URL实际上时它的一个子集。URI是一个通用的概念,由两个主要的子集URL和URN构成,URL是通过描述资源位置来标识资源的,而URN则是通过名字来识别资源的,与它们当前所处位置无关。

比如你如果想要获取URL http://www.joes-hardware.com/seasonal/index-fall.html。那么URL分以下三部分:
URL的第一部分(http)是URL方案(scheme)。方案可以告诉web客户端怎么访问资源。在这个例子中,URL说明要使用HTTP协议。
URL的第二部分(www.joes-hardware.com)指的是服务器的位置。这部分告诉web客户端资源位于何处。
URL的第三部分(/seasonal/index-fall.html)是资源路径。路径说明了请求的是服务器上哪个特定的本地资源

URL可以通过HTTP之外的协议来访问资源。它们可以指向因特网上的任意资源,比如,个人的E-mail账户:
mailto:president@whitehouse.gov
比如文件传输协议(File Transfer Protocol ,FTP)获取各种文件:
ftp://ftp.lots-o-books.com/pub/complete-price-list.xls
URL提供了一种同一的资源命名方式。大多数的URL都有同样的:"方案"://服务器位置//路径"的结构。因此,对网络上的每个资源以及获取这些资源的每种方式来说,命名资源的方法都只有一种,这样不管是谁都可以用名字来找到这个资源了。

URL出现之前的黑暗岁月
在URL出现之前,想要和朋友共享complete-catalog.xls文件,就得说这样一些话:“用FTP链接到ftp.joes-hardware.com上。用匿名登录,然后输入你的用户名作为密码。变化到pub目录。转换为二进制模式。现在可以将名为complete-catalog.xls的文件瞎子啊到本地文件系统,并在那里浏览这个文件了”
像网景Navigator和微软的Internet Explore这样的浏览器都将很多这样的功能捆绑成一个便捷包,这些程序可以通过一个接口,以同一的方式去访问许多的资源了。

2.2 URL的语法
URL提供了一种定位因特网上任意资源的手段,但这些资源可以通过各种不同的方案(比如HTTP、FTP、SMTP)来访问的,因此URL的语法会随方案的不同而有所不同。
大部分URL都遵循通用的URL语法,而且不同URL方案的风格和语法都有不少重叠。
大多数的URL方案的URL语法都简历在这9个部分构成的通用格式上:
<scheme>://<user>:<password>@<host>:<port>/<part>;<params>?<query>#<frag>
几乎没有哪个URL中包含了所有的这些组件。URL最重要的3个部分是方案(scheme)、主机(host)和路径(path),下面进行了总结:
组件 描述 默认值
方案 访问服务器以获取资源时要使用哪种协议 无
用户 某些方案访问资源时需要的用户名 匿名
密码 用户名后面可能要包含的密码,中间由冒号(:)分隔 <E-mail地址>
主机 资源宿主服务器上的主机名或分IP地址 无
端口 资源宿主服务器上正在监听的端口号,很多方案都有默认的端口号(HTTP的默认端口号是80) 每个方案特有
路径 服务器上资源的本地名,由一个斜杠(/)将其与前面的URL组件分隔开来。路径组件的语法使与服务器和方案有关的 无
参数 某些方案会用这个组件来指定输入参数。参数为名/值对。URL中可以包含多个参数字段,它们互相之间以及路径的其余部分之间用分号(;)分隔 无
查询 某些方案会用这个组件传递参数以激活应用程序(比如数据库、公告板、搜索引擎)。查询组件的内容没有通过格式。用字符“?”将其余URL的其余部分隔离开来 无
片段 一小片或一部分资源的名字。在引用对象是,不会将frag字段传送给服务器;这个字段是在客户端内部使用的。通过字符“#”将其余其与URL的其余部分分隔开来

2.2.1 方案————使用什么协议
方案是及上时规定如何访问指定资源部的重要标志符号,他会告诉负责解析URL的应用程序应该使用什么协议。
方案组件必须以一个字母符号开始,由第一个“:”符号将其与URL的其余部分分割开来。方案名是大小无关的,因此URL “http://www.joes-hardware.com” 和“HTTP://www.joes-hardware.com” 是等价的。
2.2.2 主机与端口
主机组件标识了因特网上能够访问资源的宿主机器。可以使用上述主机名(www.joes-hardware.com)或者IP地址来表示主机名。
端口组件标识了服务器正在监听的网络端口。对下层使用了TCP协议的HTTP来说,默认端口是80
2.2.3 用户名和密码
很多服务器都要求输入用户名和密码才会允许用户访问数据。FTP服务器就是这样一个常见的实例。这里几个例子:
ftp://ftp.prep.ai.mit.edu/pub/gnu
ftb://anonymous@ftp.prep.ai.mit.ed/pub/gnu
ftb://anonymouse:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
2.2.4 路径
URL的路径组件说明了资源位于服务器的什么地方。路径通常很像一个分级的系统路径。比如:
http://www.joes-hardware.com:80/seasonal/index-fall.html
路径是服务器定位资源时所需的信息,可以用字符“/”将HTTP URL的路径组件划分成一些路径段(path segment),每个路径段都有自己的参数(param)组件
2.2.5 参数
对很多方案来说,只有简单的主机名到达对象的路径是不够的。除了服务器正在监听的端口,以及是否能够通过用户和密码访问资源外,很多协议都还需要更多的信息才能工作。
为了向应用程序提供它们所需的输入参数,以便正确地与服务器进行交互,URL中有一个参数组件。这个组件就是URL中的名值对列表,由字符";"将其与URL的其余部分(以及各名值对)分割开来。它们为应用程序提供了访问资源所需的所有附加信息。如:
ftb://prep.ai.mit.edu/pub/gnu;type=d 有一个参数,参数名为type,值为d
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true 两个路径短:hammers和index.html。hammers有参数sales,值为false,index.html有参数graphics,值为true

2.2.6 查询字符串
很多资源,都是可以通过提问题或进行查询来缩小锁清秋资源类型范围的。
http://www.joes-hardware.com/inventory-check.cgi?item=12731
这个URL的大部分与我们见过的其他URL类似。只有问号(?)右边的内容是新出现的。这部分被称为查询组件。按照常规,很多网管都希望查询字符串以一系列“名/值”对的形式出现,名值对之间用字符“&”分隔:
http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue
2.2.7 片段
有些资源类型,比如HTML,除了资源级之外,还可以做进一步的划分。比如,对一个带有章节的大型文本文档来说,资源的URL会指向整个文本文档,但理想的情况是,能够指定资源中的那些章节。
为了引用部分资源或资源的额一个片段,URL支持使用片段(frag)组件来表示一个资源内部的片段。比如,URL可以指向HTML文档中一个特定的图片或小节。
片段挂在URL的右手边,最前面有一个字符“#”,比如:
http://www.joes-hardware.com/tools.html#drills
在这个例子中,片段drills引用了Joe的五金商店web服务器上页面/tools.html中的一个部分。这个部分的名字叫做drills。
HTTP服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获得了整个资源后,会根据片段来显示你感兴趣的那部分资源

2.3 URL的快捷方式
Web客户端可以理解并使用几种URL快捷方式。相对URL是在某资源内部指定一个资源的便捷缩略方式。很多浏览器还支持URL的自动“扩展”。

2.3.1 相对URL
URL有两种方式:绝对的和相对的。前面我们使用的是绝对URL。绝对URL中包含有访问资源所需的全部信息。
另一方面,相对URL是不完整的。要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个,被称为其基础(base)的URL进行解析。
相对URL是URL的一种便捷缩略记法。如:
<a href="./hammers.html">hammers</a>
这个超链接的URL看起来是不完整的,但实际上就是一个合法的相对URL。可以相对于它所在文档的URL对其解释。再次例子中,就是想对此此html:web服务器的资源/tools.html
只要知道基础URL,我们就可以由相对URL推断得到绝对URL。基础URL可能来自几个不同的地方:
1、在资源中显示指定基础URL。例如HTML中的<BASE>标记
2、封装资源的基础URL。
如果在一个没有显示指定基础URL的资源中发现了一个相对URL。如上面的例子,则将它所属资源的URL作为基础。
3、没有基础URL
在某些情况下,没有基础URL。这通常意味着你有一个相对URL,但有时也可能只是一个不完整或损坏了的URL

2.4 各种令人头疼的字符
URL是可移植的(portable)。它要统一的命名因特网上所有的资源,也就意味着要通过各种不同的协议来传送这些资源。这些协议在传输数据时都会使用不同的机制,所以,设计URL,使其可以通过任意因特网协议安全的传输是很重要的。
安全传输意味着URL的传输不能丢失信息。有些协议,比如简单邮件传输协议(Simple Mail Transfer Protocol,SMTP),所使用的传输方法就会剥去一些特定的字符。为了避开这些问题,URL只能使用一些相对较小、通用的安全字母表中的字符
除了希望URL可以被所有因特网协议进行传送之外,设计者们还希望URL是刻度的,因此,即使不可见、不可打印的字符可以穿过邮件程序,可移植也不能在URL中使用。
URL还得是完整的,这就使问题更加复杂了。URL的设计者们认识到有事人们可能会希望URL中包含除通用的安全字母表之外的二进制数据或者父。因此,需要有一种转义机制,能够将不安全的字符编码为安全字符,再进行传输

2.4.1 URL字符集
默认的计算机系统字符集通常都倾向于以英语为中心。从历史上来看,很多计算机的应用程序使用的都是US-ASCII字符集。US-ASCII使用7位二进制码来表示英文打字机提供的大多数按键和少数用于文本格式和硬件通知的不可打印控制字符。
US-ASCII的历史悠久,所以其可移植性很好。但是虽然美国用户用起来编辑,却并支持在各种欧洲语言或全世界十亿人使用的数百种非罗马语言中很常见的变体字符。而且有些URL中还会包含任意的二进制机制.
于是URL的设计者就会将转移序列集成进去了。通过转义序列,就可以用US-ASCII字符集的有限子集对任意字符值或数据进行编码了,这样就实现了可移植性和完整性。

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

2.4.3 字符限制
在URL中,有几个字符被保留起来,有着特殊的含义。有些字符不在定义的US-ASCII可打印字符集中。还有些字符会与某些因特网网关和协议产生混淆,因此不占成使用。
保留及受限的字符:
% 保留作为编码字符的转义标志
/ 保留作为路径组件中分隔路径段的定界符
. 保留在路径组件中使用
.. 保留在路径组件中使用
# 保留作为分段分界符使用
? 保留作为查询字符串定界符使用
; 保留作为方案、用户/口令,以及主机/端口组件的定界符使用
$,+ 保留
{}|\^~[]' 由于各种传输Agent代理,比如各种网管的不安全处理,使用受限
<>" 不安全;这些字符再URL范围之外通常是有意义的,比如在文档中对URL自身进行定界
0x00-0x1F,0x7F 受限,这些十六进制范围内的字符都在US-ASCII字符集的不可打印区间内
>0x7F 受限,十六进制值在此范围内的字符都不在US-ASCII字符集的7位二进制范围内

2.5 方案的世界
常用的一些方案:
http 超文本传输协议方案,除了没有用户名和密码之外,与通用的URL格式符。如果省略了端口,就默认为80
基本格式:
http://<host>:<port>/<patrh>?<query>#<frag>
示例:
http://www.joes-hardware.com/index.html
https 方案https与方案http是一对。唯一的区别在于方案的https使用了网景的SSL,SSL为HTTP链接提供了端到端口的加密机制。其语法与HTTP的语法相同,默认端口为443
示例:
https://www.joes-hardware.com/secure.html
mailto Mailto URL指向的是E-mail地址。由于E-mail的行为与其他方案都有所不同,所以mailto URL的格式与标准URL的格式也有所不同。
因特网E-mail地址的语法记录造RFC 822中。
基本格式:
mailto:<RFC-822-addr-spec>
示例:
mailto:joe@joes-hardware.com


posted @ 2017-06-08 18:13  guodaxia  阅读(329)  评论(0)    收藏  举报