URI,URL和URN有什么区别?

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

他们之间有什么明显的区别?

从RFC 3986 :

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

所以所有的URL都是URI(实际上并不完全如下),所有的URN都是URI–但是URN和URL是不同的,所以你不能说所有的URI都是URL。

编辑:我以前认为所有的url是有效的URI,但根据意见:

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

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

如果你还没有阅读罗杰·帕特的答案 ,我也build议这样做。

URI的标识URL的定位 ; 然而, 定位器也是标识符 ,所以每个URL也是一个URI,但是有不是URL的URI。

例子

  • 罗杰·皮特

这是我的名字,这是一个标识符。 它就像一个URI,但不能成为一个URL,因为它告诉你什么关于我的位置或如何与我联系。 在这种情况下,仅在美国也至less识别出另外5个人。

  • 巴哈马拿骚西湾街4914号

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

我说“像”,因为这些例子不遵循所需的语法。

stream行的困惑

维基百科 :

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

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

URN的

我的名字罗杰·帕特(Roger Pate)可能就像一个URN (统一资源名称),除非那些更加规范和意图在时间和空间上都是独一无二的。

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

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

URI – 统一资源标识符

URI是使用一串简短的数字,字母和符号来识别文档的标准。 它们由RFC 3986 – 统一资源标识符(URI):通用语法定义 。 URL,URN和URC是所有types的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 )开头,通常包含networking主机名( example.com )和文档path( /foo/mypage.html )等信息。 URL可能有查询参数和片段标识符。

URN – 统一资源名称

通过一个独特而持久的名字来标识资源,但不一定告诉你如何在互联网上find它。 它通常以前缀urn:开头urn:例如:

  • urn:isbn:0451450523通过它的ISBN编号来识别一本书。
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66一个全球唯一的标识符
  • urn:publishing:book – 将文档标识为书籍types的XML名称空间。

URN可以识别想法和概念。 他们不限于识别文件。 当一个URN代表一个文档时,它可以被一个“parsing器”翻译成一个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"> 。 然后你的浏览器将把这个URNparsing成一个URL并为你下载这本书。

任何浏览器是否真的知道如何通过URN获取文档?

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

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

不,相对和绝对URL都是URL(和URI)。

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

不,有和没有查询参数的URL都是URL(和URI)。

URL和URI之间的区别与它是否具有片段标识符有关吗?

不是。有和没有片段标识符的URL都是URL(和URI)。

URL和URI之间的区别与允许的字符有什么关系?

编号的url被定义为一个严格的URI子集。 如果parsing器允许URL中的字符而不是URI中的字符,则parsing器中存在错误。 规范详细介绍了URL和URI的哪些部分允许使用哪些字符。 一些字符只能在URL的某些部分被允许,但是字符本身并不是URL和URI之间的区别。

但W3C现在不说URL和URI是相同的东西?

是。 W3C意识到这个问题有很多困惑。 他们发布了一个URI澄清文件 ,说现在可以交替使用术语URL和URI(意思是URI)。 将URI分割成不同的types(如URL,URN和URC)已经不再有用。

一个URI既可以是URL又可以是URN?

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


URI / URL维恩图

总之: 一个URI标识,一个URL标识和定位。

考虑莎士比亚的罗密欧与朱丽叶的特定版本,其中你的家庭networking上有一个数字拷贝。

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

您还可以将文本标识为file://hostname/sharename/RomeoAndJuliet.pdf
这也将是一个URI,但更具体地说,一个URL,因为它定位的文字

*统一资源名称

(请注意,我的例子改编自维基百科 )

这些是一些写得很好,但是长篇大论的答案。 就CodeIgniter而言,以下是不同之处:

urlhttp://example.com/some/page.html

URI – /some/page.html

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

URI是当前域上的一个资源,所以需要find更less的信息。

在CodeIgniter使用URL或URI这个词的每个实例中,这是他们正在讨论的区别,尽pipe在Web的macros观scheme中,它并不是100%正确的。

URI – >统一资源标识符

  • URI是一个文本,用于标识Internet上的任何资源或名称。
  • URI具有URL(统一资源定位符)和URN(统一资源名称)forms的两个专业化,
  • 这两个规范用于标识资源和名称。

URL – >统一资源定位器

  • 它是URI的一个子集
  • URL包含位置以及检索资源的协议(例如:HTTP协议用于检索资源)

URN – >统一资源名称

  • 这也是URI的一个子集
  • URN与URL完全不同,因为它不包含任何协议。

URI,URL和URN之间的差异

1)每个URL和URN都是URI,因为URI是URL和URN的超集。

2)URL包括协议,例如http://,ftp://以及用于标识资源的位置,例如http://www.blogspot.com/abc.html

3)URN是识别资源的明确方式。 国际标准书号是URN的最佳例子

图片-1

图片-2

除了已经发布的答案之外,下面是一个维恩图来总结这个理论(来自Prateek Joshi美丽的解释 ):

在这里输入图像描述

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

在这里输入图像描述

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

据我所知,一个URI是一个描述的东西,遵循一个可接受的格式,可以定义的东西或其位置的唯一的名称(识别)。

有两个基本的子集 – 定义位置的URL(尤其是浏览器试图查找网页)和URN,定义了一些独特的名称。

我倾向于认为URN与GUID相似。 它们只是为事物提供独特名称的标准化方法。 正如在使用公司名称的名称空间声明式中那样(不像在某个服务器上有一个与该行文本对应的资源),它只是唯一标识一些东西。

我也倾向于完全避免使用URI这个术语,并且仅仅根据URL或URN来进行讨论,因为这会导致很多混淆。 我们应该真正为人们回答的问题不在于语义,而在于遇到这些术语时,如何识别这些术语是否有任何实际的差异,从而改变编程方式。 例如,如果有人纠正我的谈话,并说,“哦,这不是一个URL它是一个URI”我知道他们充满了。 如果有人说“我们正在使用URN来定义资源”,我更可能明白,我们只是将其命名为唯一名称,而不是将其定位在服务器上。

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

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

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

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

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

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

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

由于难以清楚地区分URI和URL,据我所知,W3C在URI和URL( http://www.w3.org/Addressing/ )之间不再有什么区别。

他们是一样的东西 。 URI是一个URL的泛化。 最初,计划将URI分成URL(地址)和URN(名称),但是URL和URI之间几乎没有什么区别,即使没有实际find任何资源,http URI也被用作名称空间。

URI是URL和URN的超类。 维基百科有一篇关于他们的优秀文章 ,链接到正确的RFC集合。

URI和URL

URI,URL,URN

如上图所示,这里有三个不同的组件。 在讨论这样的事情的时候,通常最好find源头,所以这里是Tim Berners-Lee等人的一个提示。 人。 在RFC 3986中:统一资源标识符(URI):通用语法:

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

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

url

URL是定义特定资源的networking位置的URI的专门化。 与URN不同,URL定义了如何获取资源。 我们每天都以http://example.com等forms使用URL,但URL不一定是HTTP URL,也可以是ftp://example.com等。

URI

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

url和URI之间的区别

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

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

URL是除了识别资源之外还提供通过描述其主要访问机制或networking“位置”来操作或获得资源表示的手段的URI。

每个URL(统一资源标识符)都是一个URI(统一资源标识符),抽象地说,每个URI都不是一个URL。 还有另一个URI的子类是URN( U niform R esource N ame),它是一个名字资源,但没有指定如何定位它们,比如mailto,news和isbn是URI。

在这里输入图像描述

URN的语法: [scheme:]scheme-specific-part[#fragment]

例子:
邮寄地址:java-net@java.sun.com
新闻:comp.lang.java
金塔:ISBN:096139210x

URL的语法: [scheme:][//authority][path][?query][#fragment]

例子:
http://java.sun.com/j2se/1.3/ docs / guide / collections / designfaq.html#28
../../../demo/jfc/SwingSet2/src/SwingSet2.java
文件://host/dir/myfile.txt

资源

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

URL是定义特定资源的networking位置的URI的专门化。 与URN不同,URL定义了如何获取资源。 我们每天都以http://stackoverflow.com等forms使用URL,但URL不一定是HTTP URL,它可以是ftp://example.com等。

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

 scheme://authority/path?query 

URI描述访问服务器( 授权 )上的资源( path )或应用程序( 查询 )的协议。

在这里输入图像说明

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

请参阅更多详情:

维基百科

尽pipe术语URI和URL是严格定义的,但许多术语用于其他事物而不是它们的定义。

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

  • REDIRECT_URL/foo
  • REQUEST_URI/foo

启用mod_rewrite后,您也将拥有这些variables:

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

这可能是一些混乱的原因。

首先,让你的头脑摆脱困惑,简单明了,你会明白。

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

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

看到这个文件 。 特别,

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

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

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

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

作为networking开发人员和程序员,我们几乎总是关心URL和URI。 现在URL被特别定义为具有所有部分scheme:scheme-specific-part,例如https://stackoverflow.com/questions 。 这是一个URL,它也是一个URI。 现在考虑在页面中embedded相对链接,如../index.html。 根据定义,这不再是一个URL。 它仍然被称为“URI参考”[RFC2396]。

我相信,当URI这个词被用来引用相对path时,“URI-reference”实际上就是被想到的。 非正式地,软件系统使用URI来指代相对path和URL的绝对地址。 所以在这个意义上,相对path不再是一个URL,而是URI。

我想知道同样的事情,我发现这个: http : //docs.kohanaphp.com/helpers/url 。

你可以使用url::current()方法看到一个清晰的例子。 如果你有这个URLhttp://example.com/kohana/index.php/welcome/home.html?query=string : http://example.com/kohana/index.php/welcome/home.html?query=string然后使用url:current()给你的URI ,根据文档,是: welcome /家

这是我的简化:

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所致。

The definition of URI has changed over the years, so it makes sense for most people to be confused. However, you can now take solace in the fact that you can refer to http://somesite.com/something as either a URL or URI … an you will be right either way (at least fot the time being anyway…)

URIs came about from the need to identify resources on the Web, and other Internet resources such as electronic mailboxes in a uniform and coherent way. So, one can introduce a new type of widget: URIs to identify widget resources or use tel: URIs to have web links cause telephone calls to be made when invoked.

Some URIs provide information to locate a resource (such as a DNS host name and a path on that machine), while some are used as pure resource names. The URL is reserved for identifiers that are resource locators , including 'http' URLs such as http://stackoverflow.com , which identifies the web page at the given path on the host. Another example is 'mailto' URLs, such as mailto:fred@mail.org , which identifies the mailbox at the given address.

URNs are URIs that are used as pure resource names rather than locators. For example, the URI: mid:0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.com is a URN that identifies the email message containing it in its 'Message-Id' field. The URI serves to distinguish that message from any other email message. But it does not itself provide the message's address in any store.

Easy to explain:

Lets assume the following

URI is your Name

URL is your address with your name in-order to communicate with you.

  • my name is Loyola

    Loyola is URI

  • my address is TN, Chennai 600001.

TN, Chennai 600 001, Loyola is URL

Hope you understand,

Now lets see a precise example

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

in the above you can communicate with a page called firstpage.html ( URI ) using following http://www.google.com/fistpage.html ( URL ).

Hence URI is subset of URL but not vice-versa.

A Uniform Resource Identifier (URI) is a string of characters which identifies an Internet Resource.

The most common URI is the Uniform Resource Locator (URL) which identifies an Internet domain address. Another, not so common type of URI is the Universal Resource Name (URN).

In order to answer this I'll lean on an answer I modified to another question . A good example of a URI is how you identify an Amazon S3 resource. Let's take:

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

which I created as a cached copy of

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

in Amazon's S3-US-West-2 datacenter.

Even if StackOverflow would allow me to hyperlink to the s3:// protocol scheme, it wouldn't do you any good in locating the resource. Because it Identifies a Resource , fig. 1 is a valid URI. It is also a valid URN, because Amazon requires that the bucket (their term for the authority portion of the URI) be unique across datacenters. It is helpful in locating it, but it does not indicate the datacenter. Therefore it does not work as a URL.

So, how do URI, URL, and URN differ in this case?

NOTE: RFC 3986 defines URIs as scheme://authority/path?query#fragment

I found:


A uniform resource identifier(URI) represents something of a big picture. You can split URIs/ URIs can be classified as locators (uniform resource locators- URL), or as names (uniform resource name-URN), or either both. So basically, a URN functions like a person's name and the URL depicts that person's address. So long story short, a URN defines an item's identity, while the URL provides defines the method for finding it, finally encapsulating these two concepts is the URI