URI, URL和URN有什么区别?

URI、URL和URN之间的区别是什么?我读过很多网站(甚至维基百科),但我不懂。

< p > URI: http://www.foo.com/bar.html < br > URL: http://www.foo.com/bar.html < br > URN: bar.html < / p >

这对吗?

348541 次浏览

统一资源标识符(URI)是一串字符,用于识别Internet上的名称或资源。

URI通过位置或名称或两者来标识资源。URI有两种专门化,即URL和URN。

统一资源定位符(URL)是统一资源标识符(URI)的一个子集,它指定了已标识的资源的可用位置以及检索它的机制。URL定义了如何获取资源。它不一定是HTTP URL (http://), URL也可以以ftp://smb://开头,指定用于获取资源的协议。

统一资源名(URN)是一个使用URN方案的统一资源标识符(URI),而不暗示所识别的资源的可用性. 0是一个统一资源标识符。urn(名称)和url(定位器)都是URI,特定的URI可以同时是名称和定位器。

这个图()显示了URI、URN和URL之间的关系:

URI, URN, URL diagram . URI, URN, URL diagram</p>
<p>urn是更大的互联网信息架构的一部分,该架构由urn、<a href=URCs和url组成。

html不是URN。URN类似于一个人的名字,而URL类似于街道地址。URN定义某物的身份,而URL提供位置。从本质上说,URN和URL是“什么”;与“where"。URN必须是这种形式的<URN> ::= "urn:" <NID> ":" <NSS>,其中<NID>是命名空间标识符,而<NSS>是命名空间特定字符串。

换句话说:

  • URL是一种标识资源的URI,还通过描述访问资源的方式提供定位资源的方法
  • URL就是URI
  • URI不一定是URL

我想说,唯一能让它100%清楚的是,有一个URI的例子,它不是URL。我们可以使用RFC3986中的例子:

URL: ftp://ftp.is.co.za/rfc/rfc1808.txt
URL: http://www.ietf.org/rfc/rfc2396.txt
URL: ldap://[2001:db8::7]/c=GB?objectClass?one
URL: mailto:John.Doe@example.com
URL: news:comp.infosystems.www.servers.unix
URL: telnet://192.0.2.16:80/
URN (not URL): urn:oasis:names:specification:docbook:dtd:xml:4.1.2
URN (not URL): tel:+1-816-555-1212 (disputed, see comments)

URI(统一资源标识符)根据维基百科:

用于标识资源的字符串。

URL(统一资源定位)是一个URI,表示与资源的交互机制。例如,https://www.google.com指定使用HTTP作为交互机制。并非所有uri都需要传递特定于交互的信息。

URN(统一资源名)是一种特定形式的URI,它的方案是urn。有关URI一般形式的更多信息,请参阅https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax

国际资源标识符是URI定义的修订版,允许我们在URI中使用国际字符。

下面我总结了Prateek Joshi的精彩解释

理论:

  • URI(统一资源标识符)标识一个资源(文本文档、图像文件等)
  • URL(统一资源定位器)是包含网络位置的uri的子集
  • URN(统一资源名)是uri的子集,在给定空间中包含名称,但不包含位置

那就是:

enter image description here

举个例子:

enter image description here

另外,如果你还没有读过,我建议你阅读罗杰·佩特的回答是

Url——__abc0

包含有关如何从其位置获取资源的信息。例如:

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:user@example.com
  • file:///home/user/file.txt
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html(一个相对URL,只在另一个URL的上下文中有用)

url总是以协议(http)开头,通常包含诸如网络主机名(example.com)和文档路径(/foo/mypage.html)等信息。url可能有查询参数和片段标识符。

呃——__abc0

通过名称标识资源。它总是以前缀urn:开头。例如:

  • urn:isbn:0451450523通过ISBN编号来识别一本书。
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66是全局唯一标识符
  • urn:publishing:book - XML命名空间,将文档标识为书籍类型。

骨灰盒可以识别想法和概念。他们不局限于识别文件。当一个URN确实表示一个文档时,它可以通过“解析器”转换成一个URL。然后可以从URL下载文档。

Uri——__abc0

uri包括url、urn和其他表示资源的方式。

既不是URL也不是URN的URI的一个例子是数据URI,例如data:,Hello%20World。它不是URL或URN,因为URI包含数据。它既不命名,也不告诉您如何通过网络定位它。

还有一些统一资源引用(uniform resource citation, urc)指向关于文档的元数据,而不是文档本身。URC的一个例子是用于查看网页源代码的指示器:view-source:http://example.com/。URC是另一种既不是URL也不是URN的URI类型。

常见问题

我听说我不应该再用URL了,为什么?

HTML的w3规范规定锚标签的href可以包含URI,而不仅仅是URL。你应该能够放入一个URN,比如<a href="urn:isbn:0451450523">。然后,浏览器会将URN解析为URL,并为您下载图书。

任何浏览器实际上知道如何通过URN获取文档吗?

据我所知不是,但是现代的web浏览器确实实现了数据URI方案。

URI可以同时是URL和URN吗?

好问题。我在网上看到很多地方都说这是真的。我还没有找到任何例子,一个东西,一个URL和一个URN。我不明白这是怎么可能的,因为URN以urn:开头,这不是一个有效的网络协议。

URL和URI的区别和它是相对的还是绝对的有关系吗?

不。相对url和绝对url都是url(和uri)。

URL和URI的区别和是否有查询参数有关系吗?

不。带和不带查询参数的url都是url(和uri)。

URL和URI之间的区别与它是否有片段标识符有关吗?

不。带和不带片段标识符的url都是url(和uri)。

tel: URI是URL还是URN?

例如tel:1-800-555-5555。它不是以urn:开头,它有一个通过网络访问资源的协议。它必须是一个URL。

但是w3C现在不是说url和uri是一回事吗?

是的。W3C意识到这方面存在大量的混淆。他们发布了一个URI澄清文档,说现在可以互换使用URL和URI了。将uri严格划分为不同类型(如URL、URN和URC)已不再有用。