在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和
互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。
历史
发展
URI与URL有着共同的历史。在1990年,Tim Berners-Lee的关于
超文本的提案间接地引入了使用URL作为一个表示
超链接目标资源的短字符串的概念。当时,人们称之为“超文本名”或“文档名”。
在之后的三年半中,由于万维网的HTML(
超文本标记语言)核心技术、HTTP与浏览器都得到了发展,区别提供资源访问和资源标记的两种字符串的必要性开始显现。虽然其时尚未被正式定义,但“
统一资源定位符”这一术语开始被用于代表前者,而后者则由“统一资源名称”所表示。
在关于定义URL和URN的争论中,人们注意到两者事实上基于同一个基础的“资源
标识”的概念。在1994年6月,IETF发布了Berners-Lee的RFC 1630,(非正式地)指出了URL和URN的存在,并进一步定义了“通用资源
标识符”——语义和语法由具体协议规定的类URL字符串的规范文法。此外,该RFC文档亦尝试定义了其时正被使用着的URL协议的文法,同时指出(但并未标准化)了相对URL和片段标识符的存在。
标准改良
1994年12月,RFC 1738 正式定义了绝对和相对URL,改进了URL文法,定义了如何解析URL为绝对形式,并更加完善地列举了其时正处于使用中的URL协议。而URN定义和文法直到1997年5月RFC 2141公布后才正式统一。
1998年8月,随着RFC 2396的发表,URI文法形成了独立的标准,同时RFC 1630和1738中关于URI和URL的许多部分也得到了修订和增补。新RFC修改了“URI”中“U”的含义:它开始代表统一(Uniform)而不再是通用(Universal)。RFC 1738中总结了既存URL协议的部分被移至另外一篇独立文档中。IANA 保留着这些协议的注册信息,而RFC 2717首次描述了注册它们的流程。
在1999年12月,RFC 2732对RFC 2396进行了小幅更新,开始允许URI包括IPv6地址。一段时间以后,在两个标准中暴露出的一些问题促使了一系列的修订草案的发展,这些草案被统称为rfc2396bis。这一由RFC 2396的共同作者Roy Fielding引导协调的集体努力,由2005年1月RFC 3986的发布推至了顶峰。该RFC文档成为了现今(2009年)于互联网上被推荐使用的URI文法版本,并使得RFC 2396成为了历史。然而,它却并未替代现有的URL协议细节;RFC 1738继续管辖着大多数协议,除了某些已被它取而代之的场合——例如被RFC 2616改良的”HTTP”协议等。与此同时,IETF发布了RFC 3986,亦即完整的STD 66标准,
标识着URI通用文法正式成官方
因特网协议。
在2002年8月,RFC 3305指出,虽然术语“URL”仍被广泛地用于日常用语之中,但其本身已几乎被废弃。其功用,仅是作为对于某些URI因包含某种指示着网络可达性的协议而作为地址存在的提醒而已。基于URI的众多标准,例如资源描述框架等,已经清楚地表明,资源标识本无需指出通过互联网获得资源副本的方法,亦无须指出资源是否基于网络。
在2006年2月,RFC 4395用了15页详细阐述了《关于新的URI方案的指导方针和登记程序》
在2006年11月1日,W3C技术架构小组公布了《连接替代副本使查找和发布可行化》,一个对于发布给定资源的多个版本的权威URI和其最佳实践的指导。例如,内容可能因用于访问资源的设备的支持性和设定不同,而语言或大小上有所调整已适应这种差异。
URI、URL和URN
统一资源定位符(Uniform Resource Locator,URL),
统一资源名称(Uniform Resource Name,URN)是URI的子集。
Web上地址的基本形式是URI,它有两种形式:
一种是URL,这是目前URI的最普遍形式。
另一种就是URN,这是URL的一种更新形式,URN不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。
URI与URL
资源,并指定对其进行操作或获取该资源的方法。可能通过对主要访问手段的描述,也可能通过网络“位置”进行标识。例如,http://www.wikipedia.org/这个URL,标识一个特定资源(
首页)并表示该资源的某种形式(例如以编码字符表示的,首页的
HTML代码)是可以通过
HTTP协议从www.wikipedia.org这个网络主机获得的。主要用在各种WWW客户程序和
服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URI还在进一步的研究当中。研究的方向就是弥补URL的缺点。
URI与URN
URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而
统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址。
用于
标识唯一书目的ISBN系统是一个典型的URN使用范例。例如,ISBN 0486275574(urn:isbn:0-486-27557-4)无二义性地标识出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。为获得该资源并阅读该书,人们需要它的位置,也就是一个URL地址。在类Unix操作系统中,一个典型的URL地址可能是一个
文件目录,例如file:///home/username/RomeoAndJuliet.pdf。该URL
标识出存储于本地硬盘中的电子书文件。因此,URL和URN有着互补的作用。
URN是基于某
名字空间通过名称指定资源的URI。人们可以通过URN来指出某个资源,而无需指出其位置和获得方式。资源无需是基于互联网的。例如,URNurn:ISBN0-395-36341-1 指定标识系统(即国际标准书号
ISBN)和某资源在该系统中的唯一表示的URI。它可以允许人们在不指出其位置和获得方式的情况下谈论这本书。
URI格式
表示指定的 URI,要使用涵盖全部必要信息的绝对 URI、绝对 URL 以及相对 URL。相对 URL,是指从浏览器中基本 URI 处指定的 URL,形如 /image/logo.gif。
URI格式由URI协议名(例如
http、
ftp、
mailto、file),一个
冒号,和协议对应的内容所构成。特定的协议定义了协议内容的语法和
语义,而所有的协议都必须遵循一定的URI文法通用规则,亦即为某些专门目的保留部分特殊字符。URI文法同时也就各种原因对协议内容加以其他的限制,例如,保证各种分层协议之间的协同性。百分号编码也为URI提供附加信息。
URL的格式由下列三部分组成:,第一部分是协议(或称为服务方式);第二部分是存有该资源的主机IP地址(有时也包括端口号);第三部分是主机资源的具体地址。
具体URI的格式如下:
[协议名]://[用户名]:[密码]@[服务器地址]:[服务器端口号]/[路径]?[查询字符串]#[片段ID]
登录信息(用户名:密码)
指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。
服务器地址
使用绝对 URI 必须指定待访问的服务器地址。地址可以是类似 hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址 名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。
服务器端口号
指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。
带层次的文件路径
指定服务器上的文件路径来定位特指的资源。这与 UNIX 系统的文件目录结构相似。
查询字符串
针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。
片段标识符
使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。但在 RFC 中并没有明确规定其使用方法。该项也为可选项。
与XML命名空间的关系
XML拥有一个叫命名空间的,一个可包含元素集和属性名称的抽象域的概念。命名空间的名称(一个必须遵守通用URI文法的字符串)用于
标识一个XML命名空间。但是,命名空间的名称一般不被认为是一个URI,因为URI规范定义了字符串的“URI性”是根据其目的而不是其词法组成决定的。一个命名空间名称同时也并不一定暗示任何URI协议的语义;例如,一个以”http:”开头的命名空间名称很可能与
HTTP协议没有任何关系。XML专家们就这一问题在XML开发
电子邮件列表上进行了深入的辩论;一部分人认为命名空间名称可以是URI,由于包含一个具体命名空间的名称集可以被看作是一个被
标识的资源,也由于“XML中的命名空间”规范的一个版本指出过命名空间名称“是”一个URI引用。但是,集体共识似乎指出一个命名空间名称只是一个凑巧看起来像URI的字符串,仅此而已。
早先,命名空间名称是可以匹配任何非空URI引用的语法的,但后来的一个对于“XML命名空间建议”的订正废弃了相对URI引用的使用。一个独立的、针对XML 1.1的命名空间的规范允许使用IRI引用作为命名空间名称的基准,而不仅是URI引用。
为了消除XML新人中产生的对于URI(尤其是HTTP URL)的使用的困惑,一个被称为RDDL(资源目录描述语言)的描述语言被建立了,虽然RDDL的规范并没有正式地位,也并没有获得任何相关组织(例如W3C)的检查和支持。一个RDDL文档可以提供关于一个特定命名空间和使用它的XML文档的,机器与人类都能读懂的信息。XML文档的作者鼓励使用RDDL文档,这样一旦文档中的命名空间名称被索引,(系统)就会取得一个RDDL文档。这样,许多开发者对于让命名空间名称指向网络可达资源的需求就能得到满足。