URI,URL和URN有什么区别?


4361

人们谈论URLURIURN好像是不同的东西,但是用肉眼看起来是一样的。

它们之间有什么明显区别?


157
URL比URI更具体。
09年

30
网站管理员问这个问题:URI和URL有什么区别
hippietrail

161
迷你维恩图:( URIs ( URLs ) )
icc97 2014年

29
即使是那些试图回答这个问题的人,关于URI与URL的混淆似乎仍然很多。看到不是URI的URL的实际示例,不是URL的URI的示例以及是URL URI的示例将使所有人受益。
丹尼斯

30
凯西:“那是你的狗吗?” 鲍勃:“称他为犬会更正确。” 凯西:“不,他是狗。先生,你是个书呆子。”
Yojimbo,2015年

Answers:


1745

RFC 3986

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

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

编辑:我以前曾认为所有URL是有效的URI,但根据注释:

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

不幸的是,这进一步使水更加浑浊。

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


15
只有带有urn:方案的URI才是URN。URI可以是经典URL,URN,也可以是不以“ urn:”开头且不引用资源位置的URI。
马克·西达德

18
不是所有URL都是URI ”。它取决于RFC的解释。例如,在Java中,URI解析器不喜欢[],这是因为规范说“应该”而不是“不应该”。
亚当·根特

5
@AdamGent:RFC 3986 1.1.3:“ URI可以进一步分类为定位符,名称或两者。” 因此,如果URL是一种特殊的URI,则意味着每个URL都是一个URI。是不是
休伯特·2013年

14
@AdamGent:这听起来像是Java实现的怪癖,而不是规范性的。该java.net.URI文档本身说:“抽象地说,每个URL都是URI,但并非每个URI都是URL”。并java.net.URL做一些奇怪的事情,例如通过将主机名解析为IP地址来检查URL的相等性(这似乎与RFC 3986 sec 6不一致,并且破坏了虚拟主机)。我认为这只是意味着Java标准库具有一些不一致的类行为。
Andrew Janke 2014年

3
@JonSkeet也许只需要区分标准还是实现?例如,“按照RFC的形式,所有URL都是URI。(RFC摘录。)但是,现有的实现可能与规范不完全匹配,可能是出于互操作性的考虑,并且可能会使用对RFC无效的URL。这是一个复杂的领域,有些人和文档可能使用“ URL”来表示与RFC指定的内容不同的内容。” 有点像大多数电子邮件验证例程与RFC定义不匹配的方式。
Andrew Janke 2014年

3839

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

例子

  • 罗杰·佩特

这是我的名字,它是一个标识符。它就像一个URI,但不能是URL,因为它不会告诉您有关我的位置或如何与我联系的信息。在这种情况下,仅在美国,也至少要识别出另外5个人。

  • 4914 West Bay Street,拿骚,巴哈马

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

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

大众的困惑

来自维基百科

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

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

URN

我的名字叫罗杰·佩特(Roger Pate),可能像URN(统一资源名称)一样,除了受到更严格的监管并且打算在时空上都是唯一的。

因为我目前与其他人共享此名称,所以它不是全局唯一的,因此不适合用作URN。但是,即使没有其他家庭使用过这个名字,我还是以我的祖父的名字命名的,因此它在时间上仍然不是唯一。即使是不是这样,我以后命名我的后代的可能性,使这个不适合作为URN。

尽管URN都共享URI的语法,但它们在严格的唯一性约束方面与URL不同。


3
URNs are different from URLs in this rigid uniqueness constraint这是否意味着URL不能唯一标识位置?
尤金

30
罗杰的回答提供了很好的实用建议。关于正式答案,我去看看W3C,他在2001年发布了“ URI,URL和URN:澄清和建议 ”。简而言之,W3C表示,当代观点认为一切都是URI。URL是一个非正式的概念,而不是一个正式的概念。混淆可以追溯到“经典视图”,该视图试图严格区分URI的类别(URL是其中的一个类别)。
netjeff

5
..a统一资源定位符(URL)..指定已标识资源的可用位置以及检索该资源的机制因此,换句话说,没有“相对” URL这样的东西吗?
Arne 2014年

9
“ earth128:Edward-de-Leau / 6000000000569063853”(在多个多重宇宙上唯一的我)是URN,URL还是URI?
edelwater

6
@edelwater:我想这是一个uri,因为它只能识别您,却不告诉您如何到达您,除非您的意思是earth128是行
星际

668

URI- 统一资源标识符

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

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- 统一资源名称

通过唯一且持久的名称来标识资源,但不一定告诉您如何在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

可以将数据直接放置到URI中,而不必在Internet上定位或命名。一个例子是data:,Hello%20World


经常问的问题

我听说我不应该再说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)。

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


URI / URL维恩图


8
是“ C:\ myfile”是URI,URL还是URN?或没有一个。
bvdb 2015年

12
除非您在文件路径上加上file://前缀,否则它不是URL或URI 。尽管浏览器通常会处理非URL格式的文件路径。 Mozilla发布了他们的文件URL测试用例
Stephen Ostermiller

2
请参阅RFC第1.1节 -“统一性提供了许多好处。即使在访问这些资源的机制可能不同的情况下,它也允许在同一上下文中使用不同类型的资源标识符。它允许对通用语法约定进行统一的语义解释。跨不同类型的资源标识符...”
Stephen Ostermiller

您提到的mailto:user@example.com是URL,但下面的另一个回答是URL 。哪个是对的?它既是URN又是URL?
user31782

4
这个答案更容易理解。我可以清楚地看到URL和URN的真实示例的图片。以及让任何人阅读有关此内容的更多信息... danielmiessler.com/study/url-uri
vee

253

概括而言:URI标识,URL标识和定位。

考虑一下莎士比亚戏剧《罗密欧与朱丽叶》的特定版本,您的家庭网络上有其数字副本。

您可以将文本标识为urn:isbn:0-486-27557-4
那将是一个URI,但更具体地说是URN *,因为它命名了text

您也可以将文本标识为file://hostname/sharename/RomeoAndJuliet.pdf
那也将是URI,但更具体地说是URL,因为它可以找到text

*统一资源名称

(请注意,我的示例改编自Wikipedia


6
注意实际的URN(以查看与URL进行比较)会很有帮助:urn:isbn:0-486-27557-4
Michael Brewer-Davis 2009年

2
@Michael-据我了解,ISBN 0486275574该文本也可以命名,因此可以作为URN。我选择一种相信读者会更熟悉的格式。
格雷格,

2
因此,说一个文件的哈希(例如SHA1)可能是该文件的URN是否有意义?
johnsimer

@johnsimer不要这样,因为您可能在同一台计算机上拥有一个文件的副本,这将导致相同的哈希,因此它不是唯一的。
Dennis98 '18

141

这是一些写得很好但是冗长的答案。就CodeIgniter而言,这是区别:

网址 - http://example.com/some/page.html

URI - /some/page.html

简而言之,URL是识别任何地方任何资源的完整方法,并且可以具有不同的协议,例如FTP,HTTP,SCP等。

URI是当前域上的资源,因此需要的信息较少。

在每种情况下,CodeIgniter都使用URL或URI一词,这就是他们所谈论的区别,尽管在网络的宏伟计划中,它并不是100%正确的。


10
这个答案可能过于简单,但要看他问题的背景。熟悉XML名称空间将对他有更大的帮助!
菲尔·斯特金

140
这个答案不仅是错误的,而且会引起误解。这两个示例都是URL。并且由于每个URL也是URI,因此这意味着两个示例都是URI。为了说明URI和URL之间的差异,这完全没有用。
约尔格W¯¯米塔格

12
就CodeIgniter而言,这是差异。他们在每种情况下都使用URL或URI一词,这就是他们所谈论的区别。因此,在网络的总体方案中,这不是100%正确的,但是在OP的问题范围内(CodeIgniter中的差异),此答案是完全正确的。
Phil Sturgeon,2010年

12
错了 @JörgWMittag基本上是正确的。URL是URI,并且是“完全限定”的;因此此答案中的“ URL”是两者。但/some/page.html不是URI。它是“相对引用”,是“ URI引用”的一种。与基本URI上下文结合使用,可以将其解析为URI,但它本身不是URI。参见RFC 3986的4.1节。CodeIgniter可能使用了错误的术语,应该予以指出;Q(当前编辑的)未定义为特定于CodeIgniter的框架。
Andrew Janke 2014年

37
对于那些阅读了这些评论并且像我一样感到困惑的未来的人:这个问题并未发布答案。这个问题与CodeIgniter无关。有一个重复的问题,特别提到了CodeIgniter,该问题已关闭并且其所有答案都移到了这个问题上。这个答案是从旧的封闭问题转移到这个受保护问题的答案之一。即使这样,我这个答案还是令人误解。我对此表示反对-其他人也应该这样做,因为在新家中,这是错误的。作者应删除它或撤消合并。
ArtOfWarfare 2014年

92

首先,让您的头脑摆脱混乱,简单点,您就会明白。

URI =>统一资源标识符 标识资源的完整地址,即位置,名称或两者。

URL =>统一资源定位符 标识资源的位置。

URN =>统一资源名称 标识资源名称

我们的地址为https://www.google.com/folder/page.html

URI(统一资源标识符)=> https://www.google.com/folder/page.html

URL(统一资源定位符)=> https://www.google.com/

URN(统一资源名称)=> /folder/page.html

URI =>(URL + URN)或仅URL或仅URN


66

除了已经发布的答案之外,这里还有一小部分是维恩图,用于总结理论(摘自Prateek Joshi的优美解释):

在此处输入图片说明

还有一个例子(也来自Prateek的网站):

在此处输入图片说明


20
我相信第二个插图是不正确的。通过规范url.spec.whatwg.org/#url-writing 必须将URL编写为相对URL或绝对URL,并可以选择后面跟有“#”和一个片段。因此,#posts片段标识符可能是URL的一部分
ruvim 2014年

7
这两个插图相互矛盾。
patapouf_ai 2015年

53

这是我作为Web专业人员遇到的最令人困惑且可能不相关的主题之一。

据我所知,URI是遵循可接受格式的对某种事物的描述,可以定义事物的唯一名称(标识)及其位置。

有两个基本的子集-URL(用于定义位置(尤其是尝试浏览网页的浏览器))和URN(用于定义事物的唯一名称)。

我倾向于认为URN与GUID类似。它们只是提供事物唯一名称的标准化方法。就像在使用公司名称的名称空间声明中一样-好像服务器上没有资源对应于该行文本-它只是唯一地标识事物。

我也倾向于完全避免使用URI这个术语,而只在适当的地方仅使用URL或URN来讨论,因为这会引起很多混乱。我们真正应该为人们回答的问题不是语义,而是如何在遇到术语时识别它们之间是否存在任何实际差异,这将改变编程情况的方法。例如,如果有人在对话中纠正我并说:“哦,那不是URL,而是URI”,我知道他们已经满了。如果有人说“我们正在使用URN定义资源”,则我更有可能理解我们只是对其进行唯一命名,而不是将其定位在服务器上。

如果我离基地很远-请让我知道!


4
不,我认为你是对的。URI vs URL vs URL vs URL vs URI-ref等的语义对大多数开发人员没有用,只是因为它引发了毫无意义的(非生产性的,对决策无关紧要的)辩论。如果使用Google API redirect_url代替redirect_uri,有人会真正关心吗?

53

身份=名称和位置

每一个URL(ü niform [R esource 大号 ocator)是一个URI(ü niform [R esource dentifier),抽象地讲,但每个URI是不是一个URL。还有URI的另一个子类别URN(ü niform [R esource ñ AME),这是一种命名资源但不指定如何定位他们,例如mailto,新闻,国际标准书号是的URI。 资源

在此处输入图片说明

瓮:

  • URN格式: urn:[namespace identifier]:[namespace specific string]
  • :和:站起来。
  • 例子
    • ur:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66
    • 骨灰盒:ISSN:0167-6423
    • ur:isbn:096139210x
    • 亚马逊资源名称(ARN)是唯一标识AWS资源。
      • ARN格式: arn:partition:service:region:account-id:resource

网址:

  • 网址格式: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • :,// ,? 和#代表自己。
  • 方案是https,ftp,gopher,mailto,新闻,telnet,文件,man,info,whatis,ldap ...
  • 例子:

类比:
到达某人:驾驶(其他协议的SMS,电子邮件,电话),地址(主机名其他电话号码,emailid)和人名(带有相对路径的对象名)。


次要问题:[domain]和[port]之间应该有一个冒号。IE:example.com:1234
Rex Schrader

42

URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

URL是URI(也包含URN)的子集。

基本上,URI是通用标识符,其中URL指定位置,URN指定名称。


1
URL不是URI的真正子集。您可以VAID URL与字符[],但不是一个URI。
亚当·根特

4
方括号在URI或URL中均无效。看到这个问题,其中有很多关于规范的参考:URL中是否允许使用方括号?。如果方括号中的任何一个出现,则应对其进行编码。
Stephen Ostermiller

35

在考虑URI时,我喜欢使用的另一个示例是XML文档的xmlns属性:

<rootElement xmlns:myPrefix="com.mycompany.mynode">
    <myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>

在这种情况下,com.mycompany.mynode将是一个URI,它为XML文档中使用它的所有元素唯一标识“ myPrefix”命名空间。这不是URL,因为它仅用于标识,本身并不用于定位。



27

他们是同一回事。URI是URL的概括。最初,原计划将URI分为URL(地址)和URN(名称),但是URL和URI之间几乎没有什么区别,即使实际未找到任何资源,http URI也用作命名空间。


我以为是另一回事。URL指的是具体对象,而URI可以指该对象或概念或其他任何对象。
克里斯·查拉巴鲁克

4
URL查找资源,它是一种URI,用于标识资源。
Mark Cidade

确实是同一回事,因为URL的定义随时间而改变。URL曾经是URI的一种特定类型,但是由于引起的混淆,W3C将URL重新定义为URI。
Stephen Ostermiller

25

URI和URL

URI,URL,URN

如上图所示,这里有三个不同的组成部分。通常,讨论此类问题时最好参考消息来源,因此,本文摘自蒂姆·伯纳斯·李等人。等 在 RFC 3986中:统一资源标识符(URI):通用语法:

统一资源标识符(URI)是紧凑的字符序列,用于标识抽象资源或物理资源。

URI可以进一步分类为定位符,名称或两者。术语“统一资源定位符”(URL)指的是URI的子集,除了标识资源外,它还通过描述资源的主要访问机制(例如,其网络“位置”)提供了定位资源的方式。



17

维基百科将在此处提供您需要的所有信息。引用自http://en.wikipedia.org/wiki/URI

URL是一种URI,除了标识资源外,它还通过描述资源的主要访问机制或网络“位置”来提供对资源进行操作或获取资源表示的方式。


16

网址

URL是URI的一种特殊形式,它定义了特定资源的网络位置。与URN不同,URL定义了如何获取资源。我们每天都使用http://example.cometc等形式的URL。但是URL不必一定是HTTP URL,也可以是ftp://example.cometc。

URI

URI通过位置或名称或两者来标识资源。通常,我们大多数人使用URI定义资源的位置。在我看来,URI可以通过名称和位置来标识资源这一事实导致了很多混乱。URI有两个专门的名称,分别是URL和URN。

URL和URI之间的区别

URI是某些资源的标识符,但是URL为您提供了获取该资源的特定信息。URI是一个URL,正如一个评论者指出的那样,现在在描述应用程序时使用URL是不正确的。通常,如果URL同时描述了资源的位置和名称,则使用的术语是URI。由于我们大多数人每天都会遇到这种情况,因此URI是正确的术语。


15

根据RFC 3986,URI由以下部分组成:

scheme://authority/path?query

URI描述了用于访问服务器(授权机构)上的资源(路径)或应用程序(查询)的协议。

在此处输入图片说明

所有URL都是URI,所有URN都是URI,但所有URI都不是URL。

请参阅更多详细信息:

维基百科


3
这并没有教我任何其他答案,这些答案至少已有6年之久,而其他答案则更完整,实际上试图解释如何从URL区分URI。
ccjmne 2014年

2
重要的是要注意,该图像是维恩图,即使它看起来不像典型的维恩图。我见过人们试图将其解释为“ URL的一部分”。此图并不能说的URI启动一个网址和最终用URN。
Stephen Ostermiller

14

URI通过位置或名称或两者来标识资源。通常,我们大多数人使用URI定义资源的位置。在我看来,URI可以通过名称和位置来标识资源这一事实导致了很多混乱。URI有两个专门的名称,分别是URL和URN。

URL是URI的一种特殊形式,它定义了特定资源的网络位置。与URN不同,URL定义了如何获取资源。我们每天都以http://stackoverflow.com等形式使用URL 。但是,URL不必一定是HTTP URL,它可以是ftp://example.com等等。


11

尽管严格定义了URI和URL术语,但许多术语将其用于定义以外的其他用途。

让我们以Apache为例。如果从Apache服务器请求http://example.com/foo,则将设置以下环境变量:

  • REDIRECT_URL/foo
  • REQUEST_URI/foo

启用mod_rewrite后,您还将拥有以下变量:

  • REDIRECT_SCRIPT_URL/foo
  • REDIRECT_SCRIPT_URIhttp://example.com/foo
  • SCRIPT_URL/foo
  • SCRIPT_URIhttp://example.com/foo

这可能是造成某些混乱的原因。


10

请参阅本文档。特别,

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

确实,这不是一个非常明确的术语。


10

阅读这些帖子后,我发现了一些非常相关的评论。简而言之,URL和URI定义之间的混淆部分是基于哪个定义取决于哪个单词以及在软件开发中非正式使用URI一词。

根据定义,URL是URI [RFC2396]的子集。URI包含URN和URL。URI和URL都有自己的特定语法,可赋予它们URI或URL状态。URN用于唯一标识资源,而URL用于查找资源。请注意,资源可以有多个URL,但只有一个URN。[RFC2611]

作为Web开发人员和程序员,我们几乎总是会关注URL,因此也会关注URI。现在,专门定义了一个URL,以包含所有部分scheme:scheme-specific-part,例如https://stackoverflow.com/questions。这是一个URL,它也是一个URI。现在考虑嵌入在页面中的相对链接,例如../index.html。根据定义,它不再是URL。它仍然是所谓的“ URI引用” [RFC2396]。

我相信,当使用URI一词来指代相对路径时,实际上是在考虑“ URI引用”。因此,非正式地,软件系统使用URI来引用相对路径和URL作为绝对地址。因此,从这个意义上说,相对路径不再是URL,而是URI。


10

这是我的简化:

URN:唯一资源名称,即“ what”(例如urn:issn:1234-5678)。这意味着是唯一的..因为没有两个不同的文档可以具有相同的缸。有点像“ uuid”

URL:在哪里可以找到它(例如https://google.com/pub?issnid=1234-5678 ..或 ftp://somesite.com/doc8.pdf

URI:可以是URN或URL。这个模糊的定义要归功于W3C和IETF制定的RFC 3986。

URI的定义多年来已经发生了变化,因此对于大多数人来说,将其混淆是有意义的。但是,您现在可以放心,因为您可以将http://somesite.com/something作为URL或URI 来引用...这两种方法都是正确的(至少现在还没有。) )


9

我想知道同一件事,发现了这一点:http : //docs.kohanaphp.com/helpers/url

您可以看到使用该url::current()方法的清晰示例。如果您具有以下URLhttp://example.com/kohana/index.php/welcome/home.html?query=string则使用url:current()会给您提供URI,根据文档,该URI为:welcome / home


1
这个答案是错误的。URI不是URL的一部分。相反,URL是URI的一种。此外,此答案中的链接已断开(并且我找不到合适的替代。)
Stephen Ostermiller

8

URI是由于需要以统一和一致的方式识别Web资源以及其他Internet资源(例如电子邮箱)而产生的。因此,可以引入一种新型的窗口小部件:用于标识窗口小部件资源的URI 或使用tel: URI使Web链接导致在调用时进行电话呼叫。

一些URI提供了用于定位资源的信息(例如DNS主机名和该计算机上的路径),而另一些URI则用作纯资源名。该URL保留用于作为资源定位符的标识符,包括“ http” URL,例如http://stackoverflow.com,该URL 标识主机上给定路径上的网页。另一个示例是“ mailto” URL,例如mailto:fred@mail.org,它标识给定地址处的邮箱。

URN是用作纯资源名称而不是定位符的URI 。例如,URI:mid:0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.com是一个URN,它在“消息ID”字段中标识包含该消息的电子邮件。URI用来将该消息与任何其他电子邮件消息区分开。但是它本身并不在任何商店中提供消息的地址。


7

为了回答这个问题,我将依靠我修改到另一个问题的答案。URI的一个很好的示例是您如何识别Amazon S3资源。让我们来:

s3://www-example-com/index.html [图。1]

我将其创建为的缓存副本

http://www.example.com/index.html [图。2]

在亚马逊的S3-US-West-2数据中心中。

即使StackOverflow允许我超链接到s3:// 协议方案,对您定位资源也没有任何好处。因为它标识一个资源无花果。1是有效的URI。这也是一个有效的URN,因为Amazon要求存储桶(其authorityURI部分的术语)在数据中心之间是唯一的。这查找它很有帮助,但是它并不表示数据中心。因此,它不能用作URL。

那么,在这种情况下URI,URL和URN有何不同?

注意: RFC 3986定义URI为scheme://authority/path?query#fragment


6

容易解释:

让我们假设以下

URI是您的名字

URL是您的地址,带有您的姓名,以便与您交流。

  • 我叫洛约拉

    Loyola是URI

  • 我的地址是TN,金奈600001。

TN,金奈600001,Loyola是URL

希望你能理解,

现在让我们看一个精确的例子

http://www.google.com/fistpage.html

在上面你可以用一个叫做页进行通信firstpage.htmlURI),使用以下http://www.google.com/fistpage.htmlURL)。

因此,URI是URL的子集,而不是URL的子集。


4
这个答案是误导的。引自维基百科:“统一资源名称(URN)的功能类似于一个人的名字,而统一资源定位符(URL)类似于该人的街道地址。换句话说:URN定义了商品的身份,而URL提供了一种查找方法它。” 同样,URN和URL都是URI。
纯素Sv 2015年

4

统一资源标识符(URI)是一个字符串,用于标识Internet资源。

最常见的URI是用于标识Internet域地址的统一资源定位符(URL)。URI的另一种(不是很常见)类型是通用资源名称(URN)。


4

我发现:


统一资源标识符(URI)代表一幅大图。您可以拆分URI / URI可以分类为定位符(统一资源定位符-URL),也可以分类为名称(统一资源名称-URN),或者两者都分类。因此,基本上,URN的功能类似于一个人的名字,而URL则描述了那个人的地址。简而言之,URN定义了项目的标识,而URL提供了定义查找项目的方法,最后封装了这两个概念的URI


2

最好的(技术)摘要imo是这个

IRI,URI,URL,URN及其与 Jan Martin Keil 的区别

IRI,URI,URL,URN及其差异

处理语义网的每个人都反复遇到术语IRIURIURLURN。但是,我经常观察到它们的确切含义有些混淆。当然,其他人也注意到了这一点(例如参见RFC3305或在Google上搜索)。老实说,一开始我什至感到困惑。但是实际上问题并不那么复杂。让我们看一下这些术语的定义,看看有什么区别:

URI

统一资源标识符是一个字符的紧凑序列识别摘要或物理资源。字符集仅限于US-ASCII,不包括某些保留字符。可以使用百分比编码来表示允许的字符集之外的字符。URI可以用作定位器,名称或两者兼有。如果URI是定位符,则它描述资源的主要访问机制。如果URI是名称,则通过给它提供唯一的名称来标识资源。URI的语法和语义的确切规范取决于所使用的Scheme,该方案由第一个冒号之前的字符定义。[RFC3986]

统一资源名称是一个URI方案中的瓮旨在作为持久的,独立于位置的,资源标识符。从历史上看,该术语也指任何URI。[RFC3986] URN由名称空间标识符(NID)和名称空间特定字符串(NSS)组成:urn :: NSS的语法和语义是特定于每个NID的。除了已注册的NID,还有其他几个未经过正式注册过程的NID。[RFC2141]

网址

统一资源定位符是一个URI的是,除了标识一个资源,提供了一种定位通过描述其主要访问机制[RFC3986]的资源的一种手段。由于没有通过一组Scheme来精确定义URL,因此“ URL是一个有用但非正式的概念”,通常是指不包含URN的URI子集[RFC3305]。

IRI

一个国际化资源标识符被类似地定义为URI,但该字符集扩展到通用字符集。因此,它可以包含保留字符以外的任何拉丁和非拉丁字符。并未扩展URI的定义,而是引入了术语IRI,以实现清晰的区分并避免不兼容。IRI旨在在支持通用编码字符集的情况下替换URI来标识资源。根据定义,每个URI都是IRI。此外,存在IRI到URI的定义性映射:每个IRI都可以精确地映射到一个URI,但是不同的IRI可以映射到相同的URI。因此,从URI转换回IRI可能不会产生原始IRI。[RFC3987]

总结一下我们可以说:

IRI is a superset of URI (IRI ⊃ URI)
URI is a superset of URL (URI ⊃ URL)
URI is a superset of URN (URI ⊃ URN)
URL and URN are disjoint (URL ∩ URN = ∅)

语义网问题的结论

RDF明确允许使用IRI来命名实体[RFC3987]。这意味着我们几乎可以在实体名称中使用每个字符。另一方面,我们经常必须处理早期状态软件。因此,使用非ASCII字符不太可能会出现问题。因此,我建议避免为实体使用非URI名称,并建议使用http URI [LINKED-DATA]。简而言之:仅使用URL命名您的实体。当然,我们可以引用由URN命名的现有实体。但是,我们应该避免重新创建这种标识符。

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.