URI、URL 和 URN 之间有什么区别?我读过很多网站(甚至是维基百科),但我不明白。
URI:http
://www.foo.com/bar.html
URL:http
://www.foo.com/bar.html
URN:bar.html
它是否正确?
统一资源标识符 ( URI
) 是一串字符,用于标识 Internet 上的名称或资源。
URI 通过位置或名称或两者来标识资源。URI 有两个特化,称为 URL 和 URN。
统一资源定位符 ( URL
) 是统一资源标识符 (URI) 的子集,它指定已识别资源的可用位置以及检索它的机制。URL 定义了如何获取资源。它不必是 HTTP URL ( http://
),URL 也可以以ftp://
or开头smb://
,指定用于获取资源的协议。
统一资源名称 ( URN
) 是使用 URN 方案的统一资源标识符 (URI),并不暗示已识别资源的可用性。URN(名称)和 URL(定位符)都是 URI,并且特定的 URI 可能同时是名称和定位符。
此图(来源)可视化了 URI、URN 和 URL 之间的关系:
URN 是由 URN、URC和 URL 组成的更大的 Internet 信息架构的一部分。
bar.html 不是 URN。URN 类似于人名,而 URL 类似于街道地址。URN 定义了某物的身份,而 URL 提供了一个位置。本质上,URN 与 URL 是“什么”与“哪里”。URN 必须是这种形式<URN> ::= "urn:" <NID> ":" <NSS>
,其中<NID>
是命名空间标识符,<NSS>
是命名空间特定字符串。
换一种说法:
我想说,唯一能让它 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 (disputed, see comments)
下面我总结了Prateek Joshi 的精彩解释。
理论:
那是:
举个例子:
另外,如果您还没有,我建议您阅读Roger Pate 的回答。
包含有关如何从其位置获取资源的信息。例如:
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:isbn:0451450523
通过 ISBN 号识别一本书。urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66
全局唯一标识符urn:publishing:book
- 将文档标识为书籍类型的 XML 命名空间。URN 可以识别想法和概念。它们不限于识别文件。当 URN 确实表示文档时,它可以通过“解析器”转换为 URL。然后可以从 URL 下载该文档。
URI 包含 URL、URN 和其他指示资源的方式。
既不是 URL 也不是 URN 的 URI 的示例是数据 URI,例如data:,Hello%20World
. 它不是 URL 或 URN,因为 URI 包含数据。它既没有命名它,也没有告诉您如何通过网络找到它。
还有统一资源引用 (URC) 指向有关文档的元数据,而不是文档本身。URC 的一个示例是用于查看网页源代码的指示器:view-source:http://example.com/
. URC 是另一种既不是 URL 也不是 URN 的 URI。
HTML 的 w3 规范说href
锚标记的可以包含 URI,而不仅仅是 URL。您应该能够放入一个 URN,例如<a href="urn:isbn:0451450523">
. 然后,您的浏览器会将该 URN 解析为 URL 并为您下载该书。
据我所知,现代网络浏览器确实实现了数据 URI 方案。
好问题。我在网上看到很多地方都说这是真的。我找不到任何既是 URL 又是 URN 的示例。我看不出这怎么可能,因为 URN 以urn:
它不是有效的网络协议开头。
不,相对 URL 和绝对 URL 都是 URL(和 URI)。
否。带有和不带有查询参数的 URL 都是 URL(和 URI)。
不。带有和不带有片段标识符的 URL 都是 URL(和 URI)。
tel:
URL 还是 URN?例如tel:1-800-555-5555
. 它不是一开始的urn:
,它有一个通过网络访问资源的协议。它必须是一个 URL。
是的。W3C 意识到对此有很多困惑。他们发布了一份URI 澄清文件,指出现在可以互换使用 URL 和 URI。将 URI 严格划分为不同类型(如 URL、URN 和 URC)已不再有用。
根据Wikipedia的 URI(统一资源标识符) :
用于标识资源的字符串。
URL(Uniform Resource Locator)是一个URI,它暗示了与资源的交互机制。例如https://www.google.com指定使用 HTTP 作为交互机制。并非所有 URI 都需要传达特定于交互的信息。
URN(统一资源名称)是一种特定形式的 URI,它的方案是 urn。有关 URI 的一般形式的更多信息,请参阅https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax
IRI(国际资源标识符)是对 URI 定义的修订,它允许我们在 URI 中使用国际字符。