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 过渡文档类型。