URI、URL 和 URN 有啥区别? [复制]

Posted

技术标签:

【中文标题】URI、URL 和 URN 有啥区别? [复制]【英文标题】:What is the difference between URI, URL and URN? [duplicate]URI、URL 和 URN 有什么区别? [复制] 【发布时间】:2011-06-22 06:00:57 【问题描述】:

URI、URL 和 URN 之间有什么区别?我读过很多网站(甚至是***),但我不明白。

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

这对吗?

【问题讨论】:

值得一读(也许在阅读下面提供的答案之后):w3.org/TR/uri-clarification 此外,以下两个链接可能有助于澄清什么是 URL VS URN。永久 URI 方案:(我猜是 URL/URN 命名空间,虽然 URN 在此列表中有它自己的条目,这导致我在此处提供的下一个链接)iana.org/assignments/uri-schemes.html URN 命名空间:www.iana.org/assignments/urn-namespaces/urn -namespaces.xml 【参考方案1】:

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

URI 通过位置、名称或两者来标识资源。 URI 有两个特化,称为 URL 和 URN。

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

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

此图 (source) 可视化了 URI、URN 和 URL 之间的关系:

URN 是更大的 Internet 信息架构的一部分,该架构由 URN、URCs 和 URL 组成。

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

换一种说法:

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

我想说,唯一能让 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)

【讨论】:

也许有一个例子可以说明这一点:用于书籍的 ISBN 号实际上是一个 URN,它是给定书籍的明确标识符。但是 ISBN 号不是 URL,因为它没有定义可以找到图书的位置。 urn:isbn:0-486-27557-4(莎士比亚戏剧《罗密欧与朱丽叶》的特定版本)实际上是一个URN(因此它是一个URI),但是它不是 URL 顺便说一句:tel 的例子并不是一个完美的例子,因为有人可能会争辩说它实际上是一个 URL(即使它不是一个 URL 在受互联网影响的常见区域)。 @thom :查看w3.org/TR/uri-clarification了解更多信息。 @ayush:电话号码实际上是对给定电话连接位置的描述。由于其唯一的电话号码,该号码允许电话系统在全球电话网络中定位接收者并适当地路由呼叫(+1 用于美国,816 用于密苏里州等)。【参考方案2】:

下面我总结Prateek Joshi's awesome explanation。

理论:

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

即:

举个例子:

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

【讨论】:

因为使用视觉效果更容易/直观。 标记为 URN 的内容并非技术上,正如接受的答案中所述,“URN 必须采用这种形式 ::= "urn:" ":" 其中 是命名空间标识符, 是命名空间特定字符串。"。虽然它有点像一个隐藏在网址下面的瓮。 根据这个答案,有些 URI 既不是 URL 也不是 URN。但这对我来说看起来很奇怪...... @superciccio14,是的,我同意。也想指出这一点。答案的作者能否给出一些既不是 URL 也不是 URN 的 URI 示例? 我认为这是错误的。 URL 和 URN 之间没有重叠。【参考方案3】:

网址 -- 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(相对 URL,仅在另一个 URL 的上下文中有用)

URL 总是以协议 (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。

常见问题解答

听说不能再说网址了,为什么呢?

HTML 的 w3 规范说 href of an anchor tag 可以包含一个 URI,而不仅仅是一个 URL。您应该可以输入一个 URN,例如 <a href="urn:isbn:0451450523">。然后,您的浏览器会将该 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 等不同类型已不再有用。

【讨论】:

a tel: 是一个 URI,因为它是一个标识符。阅读 RFC 3966。它不是 URL,因为它不能帮助您在网络上找到资源。没有实际的资源可以链接,所以这是不可能的。例如,tel: 的锚点 href URI 将启动用于拨打号码的任何程序。 @raiks 这个答案是在其他答案之后提交的。当已经有高度赞成的答案时,*** 系统不擅长识别好的迟到的答案。这个问题现在已经结束也无济于事。我在副本上放了相同的答案:What is the difference between a URI, a URL and a URN?,它有更多的赞成票,但两个最高的答案仍然有 10 倍的分数。 然后您的浏览器会将该 URN 解析为 URL 并为您下载图书。 -- 不一定。例如,如果我输入 ISBN URN,它应该带我去哪里?购买实体书或电子书的地方?在线下载或阅读的地方? URN 仅标识资源。 URL 允许您指定查找资源的位置。没有位置的已注册 URN 使用 urn 方案,而 https://www.google.com/ 是一个也是 URN 的 URL(它既识别又定位 Google Web Search 资源)。 @taco 不确定您为什么说tel: 并不能帮助您找到资源。它清楚地告诉您,您可以通过使用 PSTN 系统的传统电话网络到达它。与http: 相同的是,您可以通过 DNS 服务使用纯文本 HTTP、https: 类似但通过 TLS 和 mailto: 使用 SMTP 访问它。当您单击它时会发生什么,或者您是否拥有可以处理呼叫或发送电子邮件的软件,这与 URL 的语义完全无关。也许tel: 的消费者是一个可以轻松处理它的自动呼叫系统。 @taco 但是你为什么说你必须通过超文本访问它?一个 URL 并没有表明那个 afaik。 ftp://mailto:// 是无法通过 HTTP 访问的 URL。只有http URL 是。 tel: URL 中的 ID 是电话号码,并且说它是 tel: 不仅可以限定它,还可以指定如何访问它(通过 PSTN 调用它)。看不出tel: URL 和sip: URL 之间的区别。甚至微软也将它们称为 URL:docs.microsoft.com/en-us/previous-versions/windows/desktop/…【参考方案4】:

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

用于标识资源的字符串。

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 中使用国际字符。

【讨论】:

以上是关于URI、URL 和 URN 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

URI URL URN 的区别

URL URN URI 的区别

URI, URL 和 URN区别

URI -URL-URN区别

URL URI URN的区别

URI URL URN 之间的区别