协慌网

登录 贡献 社区

URI,URL 和 URN 有什么区别?

人们谈论URLURIURN就好像它们是不同的东西,但它们看起来与肉眼相同。

它们之间有什么区别?

答案

URI的标识URL的定位 ; 但是, 定位器也是标识符 ,因此每个 URL 也是一个 URI,但是有些 URI 不是 URL。

例子

  • 罗杰佩特

这是我的名字,这是一个标识符。它就像一个 URI,但不能是一个 URL,因为它不会告诉你我的位置或如何联系我。在这种情况下,它也恰好在美国仅识别至少 5 个其他人。

  • 巴哈马拿骚西湾街 4914 号

这是一个定位器,它是该物理位置的标识符。它就像一个 URL 和 URI(因为所有的 URL 都是 URI),并且间接地将我识别为 “驻留...”。在这种情况下,它唯一地识别我,但如果我得到一个室友,那将会改变。

我说 “喜欢”,因为这些示例不遵循所需的语法。

流行的困惑

来自维基百科

在计算中,统一资源定位符(URL)是统一资源标识符(URI)的子集,其指定所识别资源可用的位置以及用于检索它的机制。 在流行的用法和许多技术文档和口头讨论中,它经常被错误地用作 URI 的同义词 ,... [强调我的]

由于这种常见的混淆,许多产品和文档错误地使用一个术语而不是另一个术语,分配它们自己的区别,或者同义地使用它们。

URN 的

我的名字 Roger Pate 可能就像一个URN (统一资源名称),除了那些受到更多监管并且意图在空间和时间上都是独一无二的。

因为我目前与其他人分享这个名字,所以它不是全球唯一的,也不适合作为 URN。然而,即使没有其他家庭使用这个名字,我也是以我的祖父的名字命名的,所以它在一段时间内仍然不会是唯一的。即使是不是这样,我以后命名我的后代的可能性,使这个不适合作为 URN。

URN 与此严格唯一性约束中的 URL 不同,即使它们都共享 URI 的语法。

来自RFC 3986

URI 可以进一步分类为定位符,名称或两者。术语 “统一资源定位符”(URL)指的是 URI 的子集,其除了标识资源之外,还通过描述其主要访问机制(例如,其网络 “位置”)来提供定位资源的手段。历史上使用术语 “统一资源名称”(URN)来指代 “urn” 方案[RFC2141]下的两个 URI,即使资源不再存在或变得不可用,它们仍然是全局唯一且持久的,并且到具有名称属性的任何其他 URI。

因此所有 URL 都是 URI(实际上并不完全 - 见下文),并且所有 URN 都是 URI - 但 URN 和 URL 是不同的,因此您不能说所有 URI 都是 URL。

编辑:我以前认为所有的 URL 都是有效的 URI,但根据评论:

不是 “所有网址都是 URI”。这取决于 RFC 的解释。例如,在 Java 中,URI 解析器不喜欢[] ,因为规范说 “不应该” 而不是 “不应该”。

不幸的是,这使得水更加混乱。

如果您还没有阅读过Roger Pate 的答案 ,我也建议您这样做。

URI - 统一资源标识符

URI 是使用短数字,字母和符号标识文档的标准。它们由RFC 3986定义- 统一资源标识符(URI):通用语法 。 URL,URN 和 URC 都是 URI 的类型

URL - 统一资源定位器

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

  • 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 的上下文中有用)

URL 始终以协议( http )开头,通常包含网络主机名( example.com )等信息,通常还包含文档路径( /foo/mypage.html )。 URL 可以具有查询参数和片段标识符。

URN - 统一资源名称

通过唯一且持久的名称标识资源,但不一定告诉您如何在 Internet 上找到它。它通常以前缀urn:开头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

数据可以直接放入 URI 中,而不是将其放在互联网上或命名。一个例子是data:,Hello%20World


经常问的问题

我听说我不应该再说 URL 了,为什么?

HTML 的 W3 规范说锚标记href可以包含 URI,而不仅仅是 URL。您应该可以输入 URN,例如<a href="urn:isbn:0451450523"> 。然后,您的浏览器会将该 URN 解析为 URL 并为您下载该书。

任何浏览器实际上都知道如何通过 URN 获取文档吗?

不是我所知道的,但是现代网络浏览器确实实现了数据 URI 方案。

URL 和 URI 之间的区别是与相对还是绝对有关?

不。相对和绝对 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 澄清文档 ,说明现在可以互换地使用术语 URL 和 URI(表示 URI)。将 URI 严格分段为不同类型(如 URL,URN 和 URC)不再有用。

URI 可以是 URL 还是 URN?

URN 的定义现在比我上面所述的更宽松。 关于 URI最新 RFC说,任何 URI 现在都可以是 URN(无论它是以urn:开头的urn: ,只要它具有 “名称的属性”。即:即使资源不再存在或变得不可用,它仍具有全局唯一性和持久性。示例:HTML 文档类型中使用的 URI,例如http://www.w3.org/TR/html4/strict.dtd 。即使 w3.org 网站上的页面被删除,该 URI 仍将继续命名 HTML4 过渡文档类型。


URI / URL维恩图

URI的标识URL的定位 ; 但是, 定位器也是标识符 ,因此每个 URL 也是一个 URI,但是有些 URI 不是 URL。

例子

  • 罗杰佩特

这是我的名字,这是一个标识符。它就像一个 URI,但不能是一个 URL,因为它不会告诉你我的位置或如何联系我。在这种情况下,它也恰好在美国仅识别至少 5 个其他人。

  • 巴哈马拿骚西湾街 4914 号

这是一个定位器,它是该物理位置的标识符。它就像一个 URL 和 URI(因为所有的 URL 都是 URI),并且间接地将我识别为 “驻留...”。在这种情况下,它唯一地识别我,但如果我得到一个室友,那将会改变。

我说 “喜欢”,因为这些示例不遵循所需的语法。

流行的困惑

来自维基百科

在计算中,统一资源定位符(URL)是统一资源标识符(URI)的子集,其指定所识别资源可用的位置以及用于检索它的机制。 在流行的用法和许多技术文档和口头讨论中,它经常被错误地用作 URI 的同义词 ,... [强调我的]

由于这种常见的混淆,许多产品和文档错误地使用一个术语而不是另一个术语,分配它们自己的区别,或者同义地使用它们。

URN 的

我的名字 Roger Pate 可能就像一个URN (统一资源名称),除了那些受到更多监管并且意图在空间和时间上都是独一无二的。

因为我目前与其他人分享这个名字,所以它不是全球唯一的,也不适合作为 URN。然而,即使没有其他家庭使用这个名字,我也是以我的祖父的名字命名的,所以它在一段时间内仍然不会是唯一的。即使是不是这样,我以后命名我的后代的可能性,使这个不适合作为 URN。

URN 与此严格唯一性约束中的 URL 不同,即使它们都共享 URI 的语法。

来自RFC 3986

URI 可以进一步分类为定位符,名称或两者。术语 “统一资源定位符”(URL)指的是 URI 的子集,其除了标识资源之外,还通过描述其主要访问机制(例如,其网络 “位置”)来提供定位资源的手段。历史上使用术语 “统一资源名称”(URN)来指代 “urn” 方案[RFC2141]下的两个 URI,即使资源不再存在或变得不可用,它们仍然是全局唯一且持久的,并且到具有名称属性的任何其他 URI。

因此所有 URL 都是 URI(实际上并不完全 - 见下文),并且所有 URN 都是 URI - 但 URN 和 URL 是不同的,因此您不能说所有 URI 都是 URL。

编辑:我以前认为所有的 URL 都是有效的 URI,但根据评论:

不是 “所有网址都是 URI”。这取决于 RFC 的解释。例如,在 Java 中,URI 解析器不喜欢[] ,因为规范说 “不应该” 而不是 “不应该”。

不幸的是,这使得水更加混乱。

如果您还没有阅读过Roger Pate 的答案 ,我也建议您这样做。

URI - 统一资源标识符

URI 是使用短数字,字母和符号标识文档的标准。它们由RFC 3986定义- 统一资源标识符(URI):通用语法 。 URL,URN 和 URC 都是 URI 的类型

URL - 统一资源定位器

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

  • 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 的上下文中有用)

URL 始终以协议( http )开头,通常包含网络主机名( example.com )等信息,通常还包含文档路径( /foo/mypage.html )。 URL 可以具有查询参数和片段标识符。

URN - 统一资源名称

通过唯一且持久的名称标识资源,但不一定告诉您如何在 Internet 上找到它。它通常以前缀urn:开头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

数据可以直接放入 URI 中,而不是将其放在互联网上或命名。一个例子是data:,Hello%20World


经常问的问题

我听说我不应该再说 URL 了,为什么?

HTML 的 W3 规范说锚标记href可以包含 URI,而不仅仅是 URL。您应该可以输入 URN,例如<a href="urn:isbn:0451450523"> 。然后,您的浏览器会将该 URN 解析为 URL 并为您下载该书。

任何浏览器实际上都知道如何通过 URN 获取文档吗?

不是我所知道的,但是现代网络浏览器确实实现了数据 URI 方案。

URL 和 URI 之间的区别是与相对还是绝对有关?

不。相对和绝对 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 澄清文档 ,说明现在可以互换地使用术语 URL 和 URI(表示 URI)。将 URI 严格分段为不同类型(如 URL,URN 和 URC)不再有用。

URI 可以是 URL 还是 URN?

URN 的定义现在比我上面所述的更宽松。 关于 URI最新 RFC说,任何 URI 现在都可以是 URN(无论它是以urn:开头的urn: ,只要它具有 “名称的属性”。即:即使资源不再存在或变得不可用,它仍具有全局唯一性和持久性。示例:HTML 文档类型中使用的 URI,例如http://www.w3.org/TR/html4/strict.dtd 。即使 w3.org 网站上的页面被删除,该 URI 仍将继续命名 HTML4 过渡文档类型。


URI / URL维恩图