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

URI: http://www.foo.com/bar.html URL: http://www.foo.com/bar.html URN: bar.html

这对吗?


URI (Uniform Resource Identifier)是一串字符,用于在Internet上标识一个名称或资源。

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

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

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

这张图(源代码)可视化了URI、URN和URL之间的关系:

urn是更大的互联网信息架构的一部分,该架构由urn、urc和url组成。

html不是URN。URN类似于一个人的名字,而URL类似于街道地址。URN定义某物的身份,而URL提供位置。从本质上说,URN和URL就是“what”和“URL”。“在那里”。一个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

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


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

理论:

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

那就是:

举个例子:

另外,如果你还没想好,我建议你读一读罗杰·佩特的回答。


URL——统一资源定位器

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

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可能有查询参数和片段标识符。

URN—统一资源名

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

urn:isbn:0451450523以isbn编号识别图书。 Urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66全局唯一标识符 urn:publishing:book—将文档标识为图书类型的XML名称空间。

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

URI——统一资源标识符

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?

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

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

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