关于http:URI,URL和URN有什么区别?

What is the difference between URI, URL and URN?

本问题已经有最佳答案,请猛点这里访问。

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

网址:http://www.foo.com/bar.html网址:http://www.foo.com/bar.html瓮:巴尔

这是正确的吗?


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

URI根据位置或名称或两者来标识资源。一个URI有两个专门化,即URL和URN。

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

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

URN是由URN、URC和URL组成的大型Internet信息体系结构的一部分。

bar.html不是urn。瓮类似于人的名字,而URL类似于街道地址。URN定义了某个对象的标识,而URL提供了一个位置。本质上,"什么"和"在哪里"。urn的格式必须是 ::="urn:" ":" ,其中是命名空间标识符,是命名空间特定的字符串。

换个说法:

  • A URL is a URI that identifies a resource and also provides the means of locating the resource by describing the way to access it
  • A URL is a URI
  • A URI is not necessarily a URL

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

1
2
3
4
5
6
7
8
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:[email protected]
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/


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

理论:

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

即:

enter image description here

例如:

enter image description here

另外,如果你还没有,我建议你读一下罗杰·帕特的答案。


统一资源定位器

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

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:[email protected]
  • 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可以有查询参数和片段标识符。

urn—统一资源名称

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

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

URN可以识别想法和概念。它们不限于识别文件。当一个URN确实代表一个文档时,它可以被一个"解析器"转换成一个URL。然后可以从URL下载文档。

uri—统一资源标识符

URI包含URL、URN和其他表示资源的方法。

URL既不是URL也不是URN的一个例子是一个数据URI,例如EDCOX1×13。它不是URL或URN,因为URI包含数据。它既不命名它,也不告诉你如何在网络上找到它。

也有统一的资源引用(URCS)指向文档的元数据,而不是文档本身。URC的一个示例将是查看网页源代码的指示器:EDCOX1(14)。URC是URL或URN都不是URI的另一种类型。

常见问题我听说我不应该再说URL了,为什么?

HTML的W3规范说明,锚标签的EDCOX1 15的内容可以包含URI,而不只是URL。你应该能够把一个瓮,如。然后,您的浏览器会将该URN解析为一个URL,并为您下载图书。

有没有浏览器真正知道如何通过urn获取文档?

我不知道,但现代Web浏览器确实实现了数据URI方案。

一个URI可以同时是一个URL和一个URN吗?

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

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

不是。相对和绝对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)不再有用。


根据维基百科的统一资源标识符:

a string of characters used to identify a resource.

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

URN(统一资源名称)是一种特定形式的URI,其方案为URN。有关URI的一般形式的更多信息,请参阅https://en.wikipedia.org/wiki/uniform_resource_identifier语法。

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