URI、URL和URN,啥啥分不清楚!!05-13
PHP出身,最熟悉的就是URL,次之就是JS中常用的URI,URN可能就是有点陌生。
它们的真面目:
URI:Universal Resource Identifier,通用资源标识符;
URL:Uniform Resource Locator,统一资源定位符;
URN:Uniform Resource Name,统一资源名称。
其中,URL,URN是URI的子集。
Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式:
URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。
URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。
从历史发展中解读123:
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)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。
URI是以某种统一的(标准化的)方式标识资源的简单字符串。
典型情况下,这种字符串以scheme(命名URI的名字空间的标识符——一组相关的名称)开头,语法如下:
[scheme:] scheme-specific-part
URI以scheme和冒号开头。Scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由URI的名字空间决定。如下面的例子:
http://域名,其中http是scheme,//域名 是scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。
URI有绝对和相对之分,绝对的URI指以scheme(后面跟着冒号)开头的URI。前面提到的http://域名 就是绝对的URI的一个例子,其它的例子还有mailto:xxx@xxx.xx、news:地址和xyz://whatever。你可以把绝对的URI看作是以某种方式引用某种资源,而这种方式对标识符出现的环境没有依赖。如果使用文件系统作类比,绝对的URI类似于从根目录开始的某个文件的径。
与绝对的URI不同的,相对的URI不是以scheme(后面跟着冒号)开始的URI。 它的一个例子是articles/articles.html。你可以把相对的URI看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。如果用文件系统作类比,相对的URI类似于从当前目录开始的文件路径。
URL是Uniform Resource Location的缩写,译为"统一资源定位符"。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
目前最大的缺点是当信息资源的存放地点发生变化时,必须对URL作相应的改变。因此人们正在研究新的信息资源表示方法,例如:URI(Universal Resource Identifier)即"通用资源标识"(参见RFC 1630)、URN(Uniform Resource Name)即"统一资源名"和URC(Uniform Resource Citation)即"统一资源引用符"等。
URI还在进一步的研究当中。研究的方向就是弥补URL的缺点。
URN是基于某命名空间通过名称指定资源的URI。人们可以通过URN来指出某个资源,而无需指出其位置和获得方式。资源无需是基于互联网的。例如,URN urn:isbn:0-395-36341-1 指定标识系统(即国际标准书号ISBN,ISBN系统是一个典型的URN使用范例)和某资源在该系统中的唯一表示的URI例如,ISBN 0486275574(urn:isbn:0-486-27557-4)无二义性地标识出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。它可以允许人们在不指出其位置和获得方式的情况下谈论这本书;当然为获得该资源并阅读该书,人们需要它的位置,也就是一个URL地址。在类Unix操作系统中,一个典型的URL地址可能是一个文件目录,例如file:///home/username/Romeo And Juliet.pdf。该URL标识出存储于本地硬盘中的电子书文件。
因此,URL和URN有着互补的作用。
澄清URI中的命名空间非XML/XHTML namespace:
为了消除XML新人中产生的对于URI(尤其是HTTP URL)的使用的困惑,一个独立的、针对XML 1.1的命名空间的规范允许使用IRI引用作为命名空间名称的基准,而不仅是URI引用。一个被称为RDDL(资源目录描述语言)的描述语言被建立了,虽然RDDL的规范并没有正式地位,也并没有获得任何相关组织(例如W3C)的检查和支持。一个RDDL文档可以提供关于一个特定命名空间和使用它的XML文档的,机器与人类都能读懂的信息。XML文档的作者鼓励使用RDDL文档,这样一旦文档中的命名空间名称被索引,(系统)就会取得一个RDDL文档。这样,许多开发者对于让命名空间名称指向网络可达资源的需求就能得到满足。
- W3C 2015-04-12
- 简述HTTP协议 2015-04-12
- 山猫、黄蜂和鹈鹕的渊源 2015-04-05
- 你认识计算机科学之父吗? 2015-04-04
- Localhost和127.0.0.1 2015-04-01