URI,URL和URN有什么区别?

时间:2011-02-06 12:40:31

标签: http url uri urn

URI,URL和URN有什么区别?我读了很多网站(甚至维基百科),但我不明白。

URI:http://www.foo.com/bar.html
网址:http://www.foo.com/bar.html
URN:bar.html

这是对的吗?

4 个答案:

答案 0 :(得分:299)

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

URI按位置或名称或两者标识资源。 URI有两种称为URL和URN的特殊化。

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

统一资源名称(URN)是使用URN方案的统一资源标识符(URI),并不意味着已识别资源的可用性。 URN(名称)和URL(定位符)都是URI,特定URI可以同时是名称和定位器。

URN是大型互联网信息架构的一部分,由URN,URC和URL组成。

bar.html不是URN 。 URN类似于人名,而URL就像街道地址。 URN定义了某些东西的身份,而URL则提供了一个位置。基本上,“什么”与“何处”。 URN必须是<URN> ::= "urn:" <NID> ":" <NSS>形式,其中<NID>是命名空间标识符,<NSS>是命名空间特定字符串。

换句话说:

  
      
  • URL是标识资源的URI,还提供了通过描述访问资源的方式来查找资源的方法
  •   
  • 网址是URI
  •   
  • URI不一定是网址
  •   

我要说的唯一让它100%清晰的事情就是拥有一个不是URL的URI示例。我们可以使用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 (?)

同时检查一下 - https://quintupledev.wordpress.com/2016/02/29/difference-between-uri-url-and-urn/

答案 1 :(得分:101)

下面我总结Prateek Joshi's awesome explanation

理论:

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

那是:

enter image description here

举个例子:

enter image description here

此外,如果您还没有,我建议您阅读Roger Pate's answer

答案 2 :(得分:47)

网址 - Uniform Resource Locator

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

  • 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(相对网址,仅在其他网址的上下文中有用)

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

URN - Uniform Resource Name

按名称标识资源。它始终以前缀urn:开头,例如:

  • urn:isbn:0451450523按照ISBN编号识别图书。
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66全球唯一标识符
  • urn:publishing:book - 一个XML名称空间,用于将文档标识为一种书籍。

URN可以识别想法和概念。它们不仅限于识别文件。当URN表示文档时,它可以通过“解析器”转换为URL。然后可以从URL下载该文档。

URI - Uniform Resource Identifier

URI包含URL,URN和其他指示资源的方式。

既不是URL也不是URN的URI的示例是data URI,例如data:,Hello%20World。它不是URL或URN,因为URI包含数据。它既没有命名,也没有告诉你如何通过网络找到它。

还有统一的资源引用(URC)指向文档的元数据而不是文档本身。 URC的示例将是用于查看网页的源代码的指示符:view-source:http://example.com/。 URC是另一种既不是URL也不是URN的URI。

常见问题

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

HTML的w3规范说href of an anchor tag可以包含URI,而不仅仅是URL。您应该能够放入<a href="urn:isbn:0451450523">等URN。然后,您的浏览器会将该URN解析为URL并为您下载该书。

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

我不知道,但现代网页浏览器确实实现了数据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 clarification document,表示现在可以互换使用URL和URI。将URI严格分段为不同类型(如URL,URN和URC)不再有用。

答案 3 :(得分:2)

根据Wikipedia的URI(统一资源标识符):

  

用于标识资源的字符串。

URL (Uniform Resource Locator)是一个URI,它暗示了与资源的交互机制。例如https://www.google.com指定使用HTTP作为交互机制。并非所有URI都需要传达特定于交互的信息。

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

IRI (International Resource Identifier)是对URI定义的修订,允许我们在URI中使用国际字符。