What is the difference between a URI, a URL, and a URN?

What is the difference between a URI, a URL, and a URN?

技术背景

在网络开发中,URI、URL 和 URN 是常见的概念,它们都用于在互联网上标识资源,但具体含义和用途有所不同。理解它们之间的区别,对于正确处理和使用网络资源至关重要。

实现步骤

URI(Uniform Resource Identifier)

URI 是一种使用短字符串的数字、字母和符号来标识文档的标准。它由 RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax 定义。URL、URN 和 URC 都是 URI 的类型。例如,urn:isbn:0-486-27557-4 就是一个 URI,它更具体地说是一个 URN,因为它是对文本的命名。

URL(Uniform Resource Locator)

URL 包含了如何从资源的位置获取该资源的信息。它总是以协议(如 http)开头,通常包含网络主机名(如 example.com)和文档路径(如 /foo/mypage.html),还可能有查询参数和片段标识符。例如:

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:[email protected]
  • file:///home/user/file.txt
  • tel:1-888-555-5555
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html(相对 URL,仅在另一个 URL 的上下文中有用)

URN(Uniform Resource Name)

URN 通过唯一且持久的名称来标识资源,但不一定能告诉你如何在互联网上定位它。它通常以 urn: 前缀开头。例如:

  • urn:isbn:0451450523 用于通过 ISBN 编号标识一本书。
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 是一个全局唯一标识符。
  • urn:publishing:book - 一个 XML 命名空间,将文档标识为某种类型的书籍。

URC(Uniform Resource Citation)

URC 指向文档的元数据,而不是文档本身。例如,view-source:http://example.com/ 就是一个 URC。

Data URI

Data URI 可以将数据直接放入 URI 中,而不是在互联网上定位它或命名它。例如 data:,Hello%20World

核心代码

最佳实践

  • 在编写 HTML 时,使用 href 属性可以包含 URI,而不仅仅是 URL。例如,可以使用 URN 如 <a href="urn:isbn:0451450523">
  • 现代浏览器实现了 Data URI 方案,可以在合适的场景中使用。

常见问题

为什么有人说不应该再使用 URL 这个词了?

HTML 的 W3 规范指出,锚标签的 href 属性可以包含 URI,而不仅仅是 URL。理论上应该可以放入 URN,浏览器会将 URN 解析为 URL 并下载相应的资源。

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

目前没有已知的浏览器支持通过 URN 获取文档,但现代浏览器实现了 Data URI 方案。

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

无关。相对和绝对的 URL 都是 URL(也是 URI)。

URL 和 URI 的区别与它是否有查询参数有关吗?

无关。有或没有查询参数的 URL 都是 URL(也是 URI)。

URL 和 URI 的区别与它是否有片段标识符有关吗?

无关。有或没有片段标识符的 URL 都是 URL(也是 URI)。

URL 和 URI 的区别与允许使用的字符有关吗?

无关。URL 是 URI 的严格子集。如果解析器允许 URL 中使用某个字符,但不允许在 URI 中使用,那么解析器存在错误。

W3C 现在是否说 URL 和 URI 是同一回事?

是的。W3C 意识到这方面存在很多混淆,发布了 URI 澄清文档,表示现在可以互换使用 URL 和 URI 这两个术语(都表示 URI)。

一个 URI 可以既是 URL 又是 URN 吗?

现在 URN 的定义比之前更宽松。最新的 URI RFC 指出,任何具有“名称属性”(即全局唯一且即使资源不存在或不可用也能保持持久)的 URI 都可以是 URN。例如,HTML 文档类型中使用的 URI,如 http://www.w3.org/TR/html4/strict.dtd,即使 w3.org 网站上的页面被删除,该 URI 仍会继续命名 HTML4 过渡文档类型。


What is the difference between a URI, a URL, and a URN?
https://119291.xyz/posts/2025-05-08.what-is-the-difference-between-a-uri-a-url-and-a-urn/
作者
ww
发布于
2025年5月8日
许可协议