URI 是一种使用数字、字母和符号组成的短字符串来识别文档的标准。它们由RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax 定义。 URL、URN 和 URC 都是 URI 的类型。
包含有关如何从其位置获取资源的信息。例如:
http://example.com/mypage.html
ftp://example.com/download.zip
mailto:user@example.com
file:///home/user/file.txt
tel:1-888-555-5555
http://example.com/resource?foo=bar#fragment
-
/other/link.html(相对 URL,仅在另一个 URL 的上下文中有用)
URL 总是以协议 (http) 开头,通常包含网络主机名 (example.com) 和文档路径 (/foo/mypage.html) 等信息。 URL 可能有查询参数和片段标识符。
通过唯一且持久的名称标识资源,但不一定告诉您如何在 Internet 上找到它。它通常以前缀urn: 开头例如:
-
urn:isbn:0451450523 通过 ISBN 号识别一本书。
-
urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 全局唯一标识符
-
urn:publishing:book - 将文档标识为书籍类型的 XML 命名空间。
URN 可以识别想法和概念。它们不限于识别文件。当 URN 确实表示文档时,它可以通过“解析器”转换为 URL。然后可以从 URL 下载该文档。
URC -- 统一资源引用
指向关于文档的元数据而不是文档本身。 URC 的一个示例是指向页面的 HTML 源代码,例如:view-source:http://example.com/
数据可以直接放入 URI 中,而不是在 Internet 上定位或命名。一个例子是data:,Hello%20World。
常见问题解答
听说不能再说网址了,为什么呢?
HTML 的 W3 规范说 href of an anchor tag 可以包含一个 URI,而不仅仅是一个 URL。您应该可以输入一个 URN,例如 <a href="urn:isbn:0451450523">。然后,您的浏览器会将该 URN 解析为 URL 并为您下载图书。
是否有浏览器真正知道如何通过 URN 获取文档?
据我所知,现代网络浏览器确实实现了数据 URI 方案。
URL和URI的区别是相对还是绝对有关系吗?
没有。相对 URL 和绝对 URL 都是 URL(和 URI)。
URL和URI的区别与是否有查询参数有关系吗?
没有。带有和不带有查询参数的 URL 都是 URL(和 URI)。
URL 和 URI 的区别与是否有分片标识符有关系吗?
没有。带有和不带有片段标识符的 URL 都是 URL(和 URI)。
URL 和 URI 的区别与允许使用的字符有什么关系吗?
没有。 URL 被定义为 URI 的严格子集。如果解析器允许 URL 中的字符但 URI 中不允许,则解析器中存在错误。规范详细说明了 URL 和 URI 的哪些部分允许使用哪些字符。某些字符可能只允许在 URL 的某些部分出现,但字符本身并不是 URL 和 URI 之间的区别。
但是 W3C 现在不是说 URL 和 URI 是一回事吗?
是的。 W3C 意识到对此有很多困惑。他们发布了URI clarification document,表示现在可以互换使用术语 URL 和 URI(表示 URI)。将 URI 严格划分为 URL、URN 和 URC 等不同类型已不再有用。
URI 可以同时是 URL 和 URN 吗?
URN 的定义现在比我上面所说的要宽松。 latest RFC on URIs 表示任何 URI 现在都可以是 URN(不管它是否以 urn: 开头),只要它具有“名称的属性”。也就是说:即使资源不再存在或变得不可用,它也是全局唯一且持久的。示例:HTML 文档类型中使用的 URI,例如 http://www.w3.org/TR/html4/strict.dtd。即使 w3.org 网站上的页面被删除,该 URI 仍将继续命名 HTML4 过渡文档类型。