URI,URL和URN有什么区别?

tho*_*hom 250 url uri http urn

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

URI:http://www.foo.com/bar.html
URL:http://www.foo.com/bar.html
URN:bar.html

它是否正确?

ayu*_*ush 320

统一资源标识符(URI)是用于标识Internet上的名称或资源的字符串

URI按位置或名称或两者标识资源.URI有两个称为URL和URN的特化.

统一资源定位符(URL)是统一资源标识符(URI)的子集,它指定标识的资源可用的位置以及检索它的机制.URL定义了如何获取资源.它不必是HTTP URL(http://),URL也可以是(ftp://)或(smb://).

统一资源名称(URN)是使用URN方案的统一资源标识符(URI),并不意味着所识别资源的可用性.URN(名称)和URL(定位符)都是URI,并且特定URI可以同时是名称和定位符.

URN是更大的互联网信息架构的一部分,该架构由URN,URC和URL组成.

bar.html不是URN.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 (?)
Run Code Online (Sandbox Code Playgroud)

另外检查一下 - https://quintupledev.wordpress.com/2016/02/29/difference-between-uri-url-and-urn/

  • 也许一个例子可以澄清这一点:用于书籍的ISBN号实际上是**URN**,它是给定书籍的明确标识符.但是ISBN号不是**URL**,因为它没有定义书籍的位置. (65认同)
  • `urn:isbn:0-486-27557-4`(莎士比亚戏剧"罗密欧与朱丽叶"的特定版本)实际上是**URN**(因此它是一个**URI**),但它不是**网址**. (22认同)
  • 顺便说一句:`tel`示例并不是一个完美的例子,因为人们可能会认为它实际上是一个**URL**(甚至很难在共同的互联网影响区域中它不是**URL**). (11认同)
  • @ayush:电话号码实际上是给定电话连接位置的描述。由于其唯一的电话号码,该号码允许电话系统在全球电话网络中定位接收器并适当地路由呼叫(美国为“ +1”,密苏里州为“ 816”,等等)。 (2认同)

Gus*_*ori 112

下面我总结了Prateek Joshi的精彩解释.

理论:

  • URI(统一资源标识符)标识资源(文本文档,图像文件等)
  • URL(统一资源定位符)是包含网络位置的URI的子集
  • URN(统一资源名称)是URI的子集,其中包含给定空间中的名称,但没有位置

那是:

在此输入图像描述

举个例子:

在此输入图像描述

另外,如果您还没有,我建议您阅读Roger Pate的答案.

  • 被标记为URN的东西在技术上不是*,如接受的答案中所述,"URN必须是这种形式<URN> :: ="urn:"<NID>":"<NSS>其中<NID>是命名空间标识符,<NSS>是命名空间特定字符串." 虽然它是一种在功能上隐藏在网址下面的瓮. (7认同)
  • 因为在使用视觉效果时,它更容易/直观. (4认同)
  • 我认为这是错误的。URL 和 URN 之间没有重叠。 (2认同)

Ste*_*ler 54

URL - 统一资源定位器

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

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto: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的示例将是诸如的数据URIdata:,Hello%20World.它不是URL或URN,因为URI包含数据.它既没有命名,也没有告诉你如何在网络上找到它.

还有统一的资源引用(URC)指向关于文档的元数据而不是文档本身.URC的一个例子是查看网页源代码的指标:view-source:http://example.com/.URC是另一种既不是URL也不是URN的URI.

经常问的问题

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

HTML的w3规范表明,href锚标记的内容可以包含URI,而不仅仅是URL.你应该可以放入诸如此类的URN <a href="urn:isbn:0451450523">.然后,您的浏览器会将该URN解析为URL并为您下载该书.

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

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

URI可以是URL还是URN?

好问题.我在网上看到很多地方说这是真的.我无法找到任何既包含URL又包含URN的示例.我不知道它是如何可能的,因为URN开始时urn:它不是有效的网络协议.

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

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

  • `tel:` 是一个 URI,因为它是一个标识符。阅读 RFC 3966。它不是 URL,因为它不能帮助您在网络上定位资源。没有可链接的实际资源,因此这是不可能的。例如,`tel:` 的锚点 href URI 将启动用于拨打号码的任何程序。 (2认同)
  • @taco 不确定为什么你说“tel:”不能帮助你找到资源。它清楚地告诉您,您可以使用 PSTN 系统通过传统电话网络到达它。与“http:”相同的是,您可以使用纯文本 HTTP 通过 DNS 服务访问它,“https:”类似,但通过 TLS,以及使用 SMTP 的“mailto:”。当您点击它时会发生什么,或者您是否拥有可以处理呼叫或发送电子邮件的软件,这与 URL 的语义完全无关。也许“tel:”的使用者是一个可以轻松处理它的自动呼叫系统。 (2认同)
  • @taco但是你为什么说你必须通过超文本到达它?URL 并不表明这一点。`ftp://` 和 `mailto://` 是无法通过 HTTP 访问的 URL。只有“http” URL 是。`tel:` URL 中的 ID 是电话号码,说它是 `tel:` 不仅限定了它,还指定了如何到达它(通过 PSTN 呼叫它)。无法看出“tel:” URL 和“sip:” URL 之间的区别。甚至 Microsoft 将它们称为 URL:https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms776001(v=vs.85) (2认同)