ChatGPT解决这个技术问题 Extra ChatGPT

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

这个问题在这里已经有了答案:URI、URL 和 URN 有什么区别? (31 个回答) 7 年前关闭。

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

URI:http://www.foo.com/bar.html
URL: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 -命名空间.xml

C
Community

统一资源标识符 (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 之间的关系:

https://quintupledev.files.wordpress.com/2016/02/eyevn.jpg

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< /b>。
顺便说一句:tel 示例并不是一个完美的示例,因为有人可能会争辩说它实际上是一个 URL(即使很难,它也不是普通互联网中的一个 URL - 影响区域)。
@thom:查看 w3.org/TR/uri-clarification 了解更多信息。
@ayush:电话号码实际上是对给定电话连接位置的描述。由于其唯一的电话号码,该号码允许电话系统在全球电话网络中定位接收者并适当地路由呼叫(+1 用于美国,816 用于密苏里州等)。
C
Community

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

理论:

URI(统一资源标识符)标识资源(文本文档、图像文件等)

URL(统一资源定位器)是包含网络位置的 URI 的子集

URN(统一资源名称)是 URI 的子集,在给定空间中包含名称,但没有位置

那是:

https://i.stack.imgur.com/eYeVn.jpg

举个例子:

https://i.stack.imgur.com/mcTKf.jpg

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


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

URL——统一资源定位器

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

http://example.com/mypage.html

ftp://example.com/download.zip

邮箱: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 可以识别想法和概念。它们不限于识别文件。当 URN 确实表示文档时,它可以通过“解析器”转换为 URL。然后可以从 URL 下载该文档。

URI——统一资源标识符

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。您应该可以输入一个 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)已不再有用。


tel: 是一个 URI,因为它是一个标识符。阅读 RFC 3966。它不是 URL,因为它不能帮助您在网络上找到资源。没有实际的资源可以链接,所以这是不可能的。例如,tel: 的锚点 href URI 将启动用于拨打号码的任何程序。
@raiks 这个答案是在其他答案之后提交的。当已经有高度赞成的答案时,StackOverflow 系统不擅长识别好的迟到的答案。这个问题现在已经结束也无济于事。我在副本上给出了相同的答案: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/ 是一个 URL,它也是一个 URN(它既识别又定位 Google Web Search 资源)。
@taco 不确定您为什么说 tel: 并不能帮助您找到资源。它清楚地告诉您,您可以通过使用 PSTN 系统的传统电话网络到达它。与 http: 相同的是,您可以使用纯文本 HTTP 通过 DNS 服务访问它,https: 类似但通过 TLS,而 mailto: 使用 SMTP。当您单击它时会发生什么,或者您是否拥有可以处理呼叫或发送电子邮件的软件,这与 URL 的语义完全无关。也许 tel: 的使用者是一个可以轻松处理它的自动呼叫系统。
@taco 但是你为什么说你必须通过超文本来访问它?一个 URL 并没有表明那个 afaik。 ftp://mailto:// 是无法通过 HTTP 访问的 URL。只有 http 个 URL。 tel: URL 中的 ID 是电话号码,并且说它是 tel: 不仅可以限定它,还可以指定如何访问它(通过 PSTN 调用它)。看不到 tel: URL 和 sip: URL 之间的区别。甚至 Microsoft 也将它们称为 URL:docs.microsoft.com/en-us/previous-versions/windows/desktop/…
N
Nisse Engström

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