URI (Uniform Resource Identifier 统一资源标识符)是一类通用的资源标识符。它有2个子集:
- URL (Uniform Resource Location 统一资源定位符):通过描述资源的位置来表示资源的。
- URN (Uniform Resource Name 统一资源名称):通过名字来识别资源。
HTTP规范将更通用的概念 URI 作为其资源标识符。但实际上,HTTP应用程序处理的只是URI的子集URL。
URL
URL的第一部分是URL方案,第二部分是服务器的位置,第三部分是资源路径。
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
URL也可以通过HTTP之外的其他协议来访问资源。它们可以指向因特网上的任意资源或者个人的E-mail账户。
组件 | 用户 | 确认值 |
---|---|---|
方案 | 访问服务器获取资源时使用的协议 | 无 |
用户 | centered | 匿名 |
密码 | are neat | <E-mail 地址> |
主机 | 资源宿主服务器的主机名或IP地址 | 无 |
端口 | 资源宿主服务器正在监听的端口号 | 每个方案特有 |
路径 | 服务器上资源的本地名 | 无 |
参数 | 无 | |
查询 | are neat | 无 |
片段 | are neat | 无 |
- 方案-- 使用什么协议
方案负责告诉负责解析URL的应用程序应该使用什么协议。方案名是大小写无关的,HTTP://www.baidu.com 和 http://www.baidu.com是等价的。 - 主机与端口
主机组件标识了因特网上能够访问资源的宿主机器 - 用户名和密码
很多服务器要求输入用户名和密码才会允许用户访问数据,特别是FTP服务器。
第一个例子没有用户名和密码,只有标准的方案,主机和路径。如果某些应用程序使用URL方案要求输入用户名和密码。比如FTP,但用户没有提供,它通常会插入一个默认的用户名和密码。ftp::ftp.prep.ai.mite.edu/pub/gnu ftp::anonymous@ftp.prep.ai.mite.edu/pub/gnu ftp::anonymous:my_passwd@ftp.prep.ai.mite.edu/pub/gnu
第二个例子显示指定了一个anonymous用户名。
第三个例子中,指定用户名和密码,两者之间由字符":"分隔。 - 路径
URL路径说明了资源位于服务器的什么地方。 - 参数
对于很多方案来说,只有简单的路径仍然不够。很多协议还需要其他更多的信息才能工作。比如,FTP协议有2种传输模式,二进制和文本形式。你肯定不会希望用文本形式传送图片。所以URL中有一个参数组件,这个组件就是URL中的名值对列表。由字符";"将其与URL的其余部分分隔开来
HTTP URL的路径组件可以分为若干路径段,每段都可以有自己的参数。ftp://prpe.ai.mit.edu/pub/gnu;type=d
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
- 查询字符串
http://www.joes-hardare.com/inventory-check.cgi?item=12731
- 片段
有些资源类型,比如HTML,除了资源以外,还可以做进一步划分。比如一个带有章节的大型文本,资源的URL可以指向整个文本外,还可以指向资源中的哪些章节。
服务器通常只能处理整个对象,而不是对象的片段。浏览器从服务端获得整个资源后,会根据片段来显示你感兴趣的那部分资源。http://www.xxxx#xxx
URL快捷方式
相对URL
相对URL是不完整的。要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个,被称为基础的URL进行解析。
<A href="./hamers.html">hamers </A>
这个URL看起来是不完整的,但实际上是一个合法的URL。可以相对与它所在的文档的URL(基础URL)对其进行解释。
- 解析相对引用
自动扩展URL
浏览器会在用户提交URL之后,会尝试自动扩展URL。这种扩展有2种方式:
- 主机名扩展
比如在地址栏中输入yahoo,浏览器会自动在主机名中插入www和.com。 - 历史扩展
浏览器将用户访问过的URL历史存储起来,当你开始输入URL时,它们可以将你输入URL与历史记录中的URL的前缀进行匹配。
URN
URL并不完美,它们表示的是实际的地址,而不是准确的名字。这种方案的缺点就是,如果资源被移走了,URL也就不再有效了。那时,它就无法对对象进行定位。
为了应对这个问题,提出了统一资源名(unifrom resource name, URN)的概念。无论对象被搬移到了什么地方(在一个Web服务器内或是不同的Web服务器),URN都能为对象提供一个稳定的名称。
永久统一资源定位符(persistent uniform resource locators, PURL)是用URL来实现URN思想的一个例子,其基本做法是在搜索资源的过程中引入一个中间层,通过一个中间资源定位符服务器对资源的实际URL进行登记和追踪。客户端可以向定位符请求一个永久URL,定位符可以以一个资源作为相应,将客户端重定向到资源当前实际URL上去。
参考资料
《HTTP权威指南》[美] David Gourley,Brian Totty,Marjorie Sayer,Sailu Reddy,Ansbu Aggarwal