URI,URL和URN有什么区别?
人们谈论URL , URI和URN好像是不同的东西,但是用肉眼看起来都是一样的。
它们之间有什么明显区别?
#1楼
这是我的简化:
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来引用...这两种方法都是正确的(至少现在还没有。) )
#2楼
网址
URL是URI的一种特殊形式,它定义了特定资源的网络位置。 与URN不同,URL定义了如何获取资源。 我们每天都以http://example.com
等形式使用URL。但是URL不必一定是HTTP URL,也可以是ftp://example.com
等。
URI
URI通过位置或名称或两者来标识资源。 通常,我们大多数人使用URI定义资源的位置。 在我看来,URI可以通过名称和位置来标识资源这一事实导致了很多混乱。 URI有两个专门的名称,分别是URL和URN。
URL和URI之间的区别
URI是某些资源的标识符,但是URL为您提供了获取该资源的特定信息。 URI是一个URL,正如一个评论者指出的那样,现在在描述应用程序时使用URL是不正确的。 通常,如果URL同时描述了资源的位置和名称,则使用的术语是URI。 由于我们大多数人每天都会遇到这种情况,因此URI是正确的术语。
#3楼
阅读这些帖子后,我发现了一些非常相关的评论。 简而言之,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://*.com/questions 。 这是一个URL,它也是一个URI。 现在考虑嵌入在页面中的相对链接,例如../index.html。 根据定义,它不再是URL。 它仍然是所谓的“ URI引用” [RFC2396]。
我相信,当使用URI一词来指代相对路径时,实际上是在考虑“ URI引用”。 因此,非正式地,软件系统使用URI引用绝对地址的相对路径和URL。 因此,从这个意义上说,相对路径不再是URL,而是URI。
#4楼
他们是同一回事 。 URI是URL的概括。 最初,原计划将URI分为URL(地址)和URN(名称),但是URL和URI之间几乎没有区别,即使实际未找到任何资源,http URI也用作命名空间。
#5楼
从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的答案 ,我建议您也这样做。
#6楼
*将在此处提供您需要的所有信息。 引用自http://en.wikipedia.org/wiki/URI :
URL是一种URI,除了标识资源外,它还通过描述资源的主要访问机制或网络“位置”来提供对资源进行操作或获取资源表示的方式。
#7楼
URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier
URL是URI(也包含URN)的子集。
基本上,URI是通用标识符,其中URL指定位置,URN指定名称。
#8楼
URI是URL和URN的超类。 *上有一篇很好的文章 ,其中包含指向正确的RFC的链接。
#9楼
我发现:
统一资源标识符(URI)代表一幅大图。 您可以拆分URI / URI可以分类为定位符(统一资源定位符-URL),也可以分类为名称(统一资源名称-URN),或者两者都分类。 因此,基本上,URN的功能类似于一个人的名字,而URL则描述了那个人的地址。 长话短说,URN定义了项目的标识,而URL提供了定义查找项目的方法,最后封装了这两个概念的URI
#10楼
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不同。
#11楼
请参阅本文档 。 特别,
URL是一种URI的类型,它通过其主要访问机制(例如其网络“位置”)的表示而不是通过其可能具有的某些其他属性来标识资源。
确实,这不是一个非常明确的术语。
#12楼
概括而言: URI标识,URL标识和定位。
考虑一下莎士比亚戏剧《 罗密欧与朱丽叶》的特定版本,您的家庭网络上有其数字副本。
您可以将文本标识为urn:isbn:0-486-27557-4
。
那将是一个URI,但更具体地说是URN *,因为它命名了text 。
您也可以将文本标识为file://hostname/sharename/RomeoAndJuliet.pdf
。
那也将是URI,但更具体地说是URL,因为它可以找到text 。
*统一资源名称
(请注意,我的示例改编自Wikipedia )
#13楼
在考虑URI时,我喜欢使用的另一个示例是XML文档的xmlns属性:
<rootElement xmlns:myPrefix="com.mycompany.mynode">
<myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>
在这种情况下,com.mycompany.mynode将是一个URI,它为XML文档中使用它的所有元素唯一标识“ myPrefix”命名空间。 这不是URL,因为它仅用于标识,本身并不用于定位。
#14楼
URI通过位置或名称或两者来标识资源。 通常,我们大多数人使用URI定义资源的位置。 在我看来,URI可以通过名称和位置来标识资源这一事实导致了很多混乱。 URI有两个专门的名称,分别是URL和URN。
URL是URI的一种特殊形式,它定义了特定资源的网络位置。 与URN不同,URL定义了如何获取资源。 我们每天都使用http://*.com等形式的URL。但是URL不必是HTTP URL,可以是ftp://example.com
等。
#15楼
这是一些写得很好但是冗长的答案。 就CodeIgniter而言,这是区别:
网址 -http://example.com/some/page.html
URI - /some/page.html
简而言之,URL是识别任何地方任何资源的完整方法,并且可以具有不同的协议,例如FTP,HTTP,SCP等。
URI是当前域上的资源,因此需要的信息较少。
在每种情况下,CodeIgniter都使用URL或URI一词,这就是他们在谈论的区别,尽管在网络的宏伟计划中,它并不是100%正确的。
#16楼
尽管严格定义了URI和URL术语,但许多术语将其用于定义以外的其他用途。
让我们以Apache为例。 如果从Apache服务器请求http://example.com/foo ,则将设置以下环境变量:
-
REDIRECT_URL
:/foo
-
REQUEST_URI
:/foo
启用mod_rewrite后,您还将拥有以下变量:
-
REDIRECT_SCRIPT_URL
:/foo
-
REDIRECT_SCRIPT_URI
:http://example.com/foo
:http://example.com/foo
-
SCRIPT_URL
:/foo
-
SCRIPT_URI
:http://example.com/foo
:http://example.com/foo
这可能是造成某些混乱的原因。
#17楼
由于很难清楚地区分URI和URL,据我所知,W3C在URI和URL( http://www.w3.org/Addressing/ )之间不再起作用。
#18楼
根据RFC 3986 ,URI由以下部分组成:
scheme://authority/path?query
URI描述了用于访问服务器( 授权机构 )上的资源( 路径 )或应用程序( 查询 )的协议。
所有URL都是URI,所有URN都是URI,但所有URI都不是URL。
请参阅更多详细信息:
#19楼
除了已经发布的答案之外,这里还有一小部分是维恩图,用于总结理论(摘自Prateek Joshi的优美解释 ):
还有一个例子(也来自Prateek的网站):
#20楼
统一资源标识符(URI)是一个字符串,用于标识Internet资源。
最常见的URI是用于标识Internet域地址的统一资源定位符(URL)。 URI的另一种(不是很常见)类型是通用资源名称(URN)。
#21楼
我想知道同一件事,并且发现了这一点: http : //docs.kohanaphp.com/helpers/url 。
您可以使用url::current()
方法看到一个清晰的示例。 如果您具有以下URL : http://example.com/kohana/index.php/welcome/home.html?query=string
: http://example.com/kohana/index.php/welcome/home.html?query=string
则使用url:current()
会给您提供URI ,根据文档,该URI为: Welcome /家
#22楼
容易解释:
让我们假设以下
URI是您的名字
URL是您的地址,带有您的姓名,以便与您交流。
-
我叫洛约拉
Loyola是URI
我的地址是TN,金奈600001。
TN,金奈600001,Loyola是URL
希望你能理解,
现在让我们看一个精确的例子
http://www.google.com/fistpage.html
在上面你可以用一个叫firstpage.html(URI)页面上,使用下面的沟通http://www.google.com/fistpage.html (URL)。
因此,URI是URL的子集,而不是URL的子集。
#23楼
URI- 统一资源标识符
URI是使用简短的数字,字母和符号字符串标识文档的标准。 它们由RFC 3986-统一资源标识符(URI):通用语法定义 。 URL,URN和URC都是URI 类型 。
URL- 统一资源定位器
包含有关如何从其位置获取资源的信息。 例如:
-
http://example.com/mypage.html
-
ftp://example.com/download.zip
-
mailto:aaa@qq.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:
例如:
-
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。 您应该能够放入诸如<a href="urn:isbn:0451450523">
类的URN。 然后,您的浏览器会将该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文档类型(例如http://www.w3.org/TR/html4/strict.dtd
使用的URI。 即使删除了w3.org网站上的页面,该URI仍将继续命名HTML4过渡文档类型。
#24楼
为了回答这个问题,我将依靠我修改到另一个问题的答案 。 URI的一个很好的例子是您如何识别Amazon S3资源。 让我们来:
s3://www-example-com/index.html
[图。1]
我创建为的缓存副本
http://www.example.com/index.html
[图。2]
在亚马逊的S3-US-West-2数据中心中。
即使*允许我超链接到s3://
协议方案,在定位资源方面也没有任何好处。 因为它标识 资源 ,所以。 1是有效的URI。 这也是有效的URN,因为Amazon要求存储桶(URI的authority
部分的术语)在数据中心之间是唯一的。 这对查找它很有帮助 ,但它并不表示数据中心。 因此,它不能用作URL。
那么,在这种情况下URI,URL和URN有何不同?
- 图。 1是一个URI
- 图。 1是URN
- 图。 2是一个URI
- 图。 2是网址
- 图的URL 。 1是http://www-example-com.s3-website-us-west-2.amazonaws.com/
- 也是http://www-example-com.s3.amazonaws.com/index.html
- 但不是http://www-example-com.s3.amazonaws.com/ (对于Amazon S3,没有数据中心,没有文件名太通用)
注意: RFC 3986将URI定义为scheme://authority/path?query#fragment
#25楼
标识符=名称+位置
每一个URL(U niform 方案资源大号 ocator)是一个URI(U niform 方案资源我 dentifier),抽象地讲,但每个URI是不是一个URL。 还有URI的另一个子类别URN(U niform 方案资源ñ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
- ARN格式:
网址:
- URL格式:
[scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
- :,// ,? 和#代表自己。
- 方案是https,ftp,gopher,mailto,新闻,telnet,文件,man,info,whatis,ldap ...
- 例子:
- http:// ip_server / path?查询
- ftp:// ip_server / path
- mailto:电子邮件地址
- 新闻:新闻组名称
- telnet:// ip_server /
- 文件:// ip_server / path_segments
- ldap:// hostport / dn?属性?作用域?过滤器?扩展名
比喻:
与某人联系:驾驶(协议其他人的SMS,电子邮件,电话),地址(主机名,其他电话号码,emailid)和人名(带有相对路径的对象名)。
#26楼
URI,URL,URN
如上图所示,这里有三个不同的组成部分。 通常,讨论此类问题时最好参考消息来源,因此,本文摘自蒂姆·伯纳斯·李等人。 等 在RFC 3986中:统一资源标识符(URI):通用语法:
统一资源标识符(URI)是紧凑的字符序列,用于标识抽象资源或物理资源。
URI可以进一步分类为定位符,名称或两者。 术语“统一资源定位符”(URL)指的是URI的子集,除了标识资源外,它还通过描述资源的主要访问机制(例如,其网络“位置”)提供了定位资源的方式。
#27楼
首先,让您的头脑摆脱混乱,简单点,您就会明白。
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
#28楼
答案是模棱两可的。 在Java中,通常以这种方式使用它:
统一资源定位符(URL)是用于标识包括方案(http,https,ftp,新闻等)的Internet资源的术语。 例如,URI,URL和URN有什么区别?
统一资源标识符(URI)用于标识Web服务器中的单个文档:例如/ questions / 176264 / wuris-the-difference-betweena-uri-and-a-url
在Java Servlet中,URI经常引用没有Web应用程序上下文的文档。
#29楼
这是我作为Web专业人员遇到的最令人困惑且可能不相关的主题之一。
据我了解,URI是遵循可接受格式的对事物的描述,可以定义事物的唯一名称(标识)或位置。
有两个基本的子集-URL(用于定义位置(尤其是尝试浏览网页的浏览器))和URN(用于定义事物的唯一名称)。
我倾向于认为URN与GUID类似。 它们只是提供事物唯一名称的标准化方法。 就像在使用公司名称的名称空间声明中一样-好像服务器上没有资源可以对应该行文本-它只是唯一地标识某些东西。
我也倾向于完全避免使用URI一词,而仅在适当的地方仅使用URL或URN来讨论,因为这会引起很多混乱。 我们真正应该为人们回答的问题不是语义,而是如何在遇到术语时识别它们之间是否存在任何实际差异,这将改变编程情况的方法。 例如,如果有人在对话中纠正我,并说:“哦,那不是URL,而是URI”,我知道他们已经充满了。 如果有人说“我们正在使用URN定义资源”,我很有可能会理解我们只是对其进行唯一命名,而不是将其定位在服务器上。
如果我离基地很远-请让我知道!
#30楼
URI是由于需要以统一和连贯的方式识别Web资源以及其他Internet资源(例如电子邮箱)而产生的。 因此,可以引入一种新型的窗口小部件:用于标识窗口小部件资源的URI或使用tel: URI使Web链接导致在调用时进行电话呼叫。
一些URI提供了用于定位资源的信息(例如DNS主机名和该计算机上的路径),而另一些URI则用作纯资源名。 该URL保留用于作为资源定位符的标识符,包括诸如http://*.com之类的“ http” URL,该URL标识主机上给定路径上的网页。 另一个示例是“ mailto” URL,例如mailto:aaa@qq.com ,它标识给定地址处的邮箱。
URN是用作纯资源名称而不是定位符的URI。 例如,URI: mid:aaa@qq.com是一个URN,它在“消息ID”字段中标识包含该消息的电子邮件。 URI用来将该消息与其他任何电子邮件消息区分开。 但是它本身并不在任何商店中提供消息的地址。
下一篇: 拓跋焘是什么下场?他是怎么死的
推荐阅读
-
网易163邮箱和126邮箱有什么区别?
-
火山小视频和火山极速版有什么区别 火山小视频对比火山极速版
-
Axure全局辅助线和页面辅助线有什么区别?
-
http和https有什么区别?网站有没有必要启用https
-
微软Surface 3和Surface Pro 3有什么区别?微软Surface系列规格对比
-
Visual Studio创建64位和32位项目有什么区别?
-
Focusky动画演示大师中不可见帧和可见帧有什么区别?
-
apple watch运动版和标准版有什么区别 apple watch运动版和标准版区别介绍
-
ABBYY FineReader简体中文版和多语言专业版有什么区别?
-
手机淘宝和电脑淘宝有什么区别(揭晓两种不同处)