URI和URL有什么区别?


44

我已阅读以下页面:

我了解有关URL,URN和URI的基本知识;但是他们之间的差异很小。我无法理解的是在这样的页面中:http://www.bernzilla.com/item.php?id=100哪一部分是URL,URN和URI!
URI是整个部分,但URL和URN呢?

图片来自维基百科

编辑:
从w3c.org:

URL是一种URI的类型,它通过其主要访问机制(例如,其网络“位置”)的表示而不是通过其可能具有的某些其他属性来标识资源。

来自www.damnhandy.com

现在认为在描述应用程序时使用URL是不正确的。

现在是id属性?那应用部分呢?PHP是应用程序吗?


3
这个问题已经在Stack Overflow上问了好几次了,引起了很多关注和良好的反响:URI和URL有什么区别?
hippietrail 2012年

Answers:


42

URI / URL维恩图

URL- 统一资源定位器

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

  • 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可能具有查询参数和片段标识符。

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的示例是数据URI,例如data:,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提取文档?

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

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

否。相对URL和绝对URL都是URL(和URI)。

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

否。带有和不带有查询参数的URL都是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:),只要它有一个名为“的性质。” 也就是说:即使资源不再存在或变得不可用,它也具有全局唯一性和持久性。例如:HTML文档类型(如中)中使用的URI http://www.w3.org/TR/html4/strict.dtd。即使删除了w3.org网站上的页面,该URI仍将继续命名HTML4过渡文档类型。


使W3C澄清和URL / URI区别困惑的是,实际上许多Web服务器文档将URL描述为整个请求字符串,而将URI描述为“遵循协议的部分”。它甚至通过变量名$ uri引用该部分。例如:nginx.com/blog/creating-nginx-rewrite-rules 从W3C定义来看,这严格地说不是“正确”的吗?但这是我认为最有用的。
mike

1
URI被广泛误解。许多人认为URI是URL的一部分,例如相对URL,或遵循协议。这从来都不是正确的,但是这些想法经常使它成为服务器文档或编程API。
Stephen Ostermiller

10

我认为这些文章解释得很好。要回答您的问题- 所有这些都是URL:

http://www.bernzilla.com/item.php?id=100

每一点- http: www.bernzilla.com依此类推都有自己的名字:

  • http:是计划
  • www是该子域
  • bernzilla.com是域
  • com是顶级域名或TLD
  • (那里可能有一个文件夹或路径,例如/dir/item.php,但没有)
  • item.php是具有扩展名php的页面或文件名
  • id = 100是查询字符串

我可以从Wikipedia看到该图,但是为什么要问。该图表明URI有两种类型-URL和URN,中间的模糊位是什么时候可以同时存在。


感谢您的回答。我编辑了问题。你可以再看看吗?
撤消

我不理解有关描述应用程序的引用,也看不到有人指出的评论。我将更新答案以描述各个部分。
paulmorriss 2011年

@paul您不是在第一行中表示URI吗?id=100不是位置,而是指标。
DisgruntledGoat

我想我的意思是URL。在某些网站上,如果您更改ID,通常来说会得到不同的“页面”。阅读维基百科上资源的定义,我认为页面是资源的一个示例。
paulmorriss 2011年

7

您提到的URL并非同时由URL和URN部分组成。

http://www.bernzilla.com/item.php?id=100 是URL和URI。

基本上,URI是URL和URN的超集。URL和URN之间也有一些重叠。

URI通过位置或名称或两者来标识资源。

因此,任何URL都是URI,任何URN都是URI,但并非每个URI都是URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.