URI、URL、URN
URI:统一资源标识符(Uniform Resource Identifier)。是一个通用的概念。
URL:统一资源定位符(Uniform Resource Locator)。表示资源在服务器中的实际地址。
URN:统一资源名(Uniform Resource Name)。为对象提供一个稳定的名称。
URI
一类通用的资源标识符。由两个主要子集 URL 和 URN 构成。
URL
URL提供了统一的命名方式:“方案://服务器位置/路径” (如 http://www.baidu.com/index.html):
方案(sheme):告知 Web 客户端访问资源所使用的协议,如:http;
服务器位置(host):告知 Web 客户端资源位于何处,如:www.baidu.com;
路径(path):所请求的资源位于服务器上的特定位置,如:/index.html。
URL 定义了用户所需特定资源的位置以及获取方式,可以指向因特网上的任意资源。
URL 语法
URL 语法会随着方案(如 HTTP、FTP、SMTP)的不同而有所不同,但大部分 URL 都遵循通用的 URL 语法。
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
方案(sheme):告诉解析 URL 的应用程序,使用什么协议;方案名是大小写无关的。
主机(host):标识因特网上能够访问资源的宿主机器。可以用主机名或者 UP 地址表示。
端口(port):标识服务器正在监听的网络端口。常用默认端口,请参考:http://www.wusiwei.com/?post=109
用户名(user)和密码(password):很多服务器会要求输入用户名和密码才允许用户访问数据,如 FTP,若用户没有提供,则会插入一个默认的用户名和密码。如 ftp://anonymous:my_passwd@ftp.prep.ai.mlt.edu/pub/gnu。
路径(path):说明资源位于服务器的特定地方。
参数(params):为了正确地与服务器进行交互,向负责解析 URL 的应用程序提供所需的协议参数。名值对列表。HTTP URL 的路径组件可以分成若干路径段,每段都可以有自己的参数,例如:http://www.joes-haniware.com/hammers;sale=false/index.html;graphocs=true
字符串(query):通过提问题或进行查询缩小所请求资源类型范围。查询字符串通常为一系列的“名/值”对的形式出现,名值对之间用字符“&”分隔。
片段(frag):引用部分资源或资源的一个片段。HTTP 服务器通常只处理整个对象,也就是说改变片段值,不会向 HTTP 服务器发送请求,因此 URL 片段仅有客户端使用。
URN
URL 是一种强有力的工具,但 URL 并不完美,它们表示的是实际的地址,而不是准确的名字,这意味着当资源被移走了,URL 就无法对对象进行定位。如果有了对象的准确名称,不论其位于何处都可以找到这个对象。URN 就有为对象提供一个稳定的名称的。
PURL:永久统一资源定位符(Persistent Uniform Resource Locators)。是用 URL 来实现 URN 功能的例子。基本思想是,在搜索资源的过程中引入另一个中间层,通过一个中间资源定位符(resource locator)服务器对资源的实际 URL 进行等级和跟踪。客户端向定位符请求一个永久 URL,定位符可以以一个资源作为响应,将客户端重定向到资源当前实际的 URL 上去。
由于从 URL 转换成 URN 是一项巨大的工程,标准化工作的进程很缓慢,URN 现在都没有投入使用。
参考:HTTP 权威指南