理解URI,URL,URN

在Web领域,我们常见三个专业词汇URI,URL,URN,对于这三个词我们或许知道其原意,其相互之间的关系,但对于URI,URN总有那么一层朦胧感,因为URI是抽象的概念,而URN远离现实开发有关。在这里对这3个概念进行一些分析,试图理清其内在逻辑。

首先需要了解IETF,RFC

在了解上述3个专业名词前,我们需要先了解IETF和RFC,因为这两者定义了UR*。IETF是国际互联网工程任务组(The Internet Engineering Task Force),它是互联网技术标准化的国际民间组织。RFC是提交请求(Request For Comments),是一系列以编号排定的文件。RFC文档可分为三种:

  • BCP Best Current Practice,最佳实践。
  • FYI For Your Information,信息文档,仅供讨论。
  • STD Standard, 标准文档。

IETF是定义URI,URL,URN的组织,RFC是定义URI,URL,URN的标准文件。

参考:

RFC2026 https://datatracker.ietf.org/doc/rfc2026/

RFC wiki https://zh.wikipedia.org/wiki/RFC

URL

URL是统一资源定位符的缩写,它对网络中的资源的定位提供了一种统一方案。它有如下的通用格式:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>

URL是我们最常见,开发过程中也时时刻刻能接触到的概念。也就是如上格式的表示网络资源的地址的字符串。此外还有相对URL,这里就不细述了。

类比于现实中的地址,URL就是Web中资源地址。

参考:

URL定义 RFC1738 https://www.w3.org/Addressing/rfc1738.txt

URL讲解 URL与资源《HTML权威指南》第二章

URN

URN是统一资源名称的缩写,它对网络中的资源的名称提供了一种统一方案。它要求全球唯一,并在资源不存在或不再可用时依然保持不变。它的格式如下:

"urn:" <NID> ":" <NSS>

URN基于这样一种想法,网络中的URL是不会持久的,就像人可能搬家一样,网络资源也可能被移动,导致URL失效。其基本思想是引入持久层URN,就像人一生基本不会改名,这样就能避免URL的失效问题。URN采取某些策略实现URN与实际资源的映射,但这里不用考虑。

20多年过去URN似乎并没实用价值,这是很正常的,技术发展中很多技术标准都沉默于历史中。但并不意味着其一定没有价值,就像Web开发早期流行SOAP,后来回归到HTTP原始语义的RESTful。目前需要理解URN是因为其与URL,URI是绑定关系,因此必须知其所以然。我看来,URN没被使用的原因在于:

  • URN与URL是不兼容的方案。
  • 搜索引擎、站内搜索、移动互联网等出现,用户不关心也记不住URL(URN也一样)。URL是Web底层的基础设施,进行改动成本很高,收益很低。
  • URL的持久性没有想象中那么糟糕,合理的URL规划能满足URN所预期的功能。
  • 用户习惯URL,采用URN会导致学习成本。

总而言之,多年的实践看来,URL并没有想象中那么差,URN也没有想象中那么好。

类比于现实中的人/机构的名称,URN就是Web中的资源名称。

参考:

URN讨论:RFC1737 http://www.ietf.org/rfc/rfc1737.txt

URN语法:RFC2141 http://www.ietf.org/rfc/rfc2141.txt

URN历史:《HTML权威指南》第二章 2.6 未来展望

分清 URI、URL 和 URN:https://www.ibm.com/developerworks/cn/xml/x-urlni.html#artrelatedtopics

URI

URI是统一资源标志符的缩写,它是对URL和URN的统一化抽象,URI为识别资源提供了一种简单且可扩展的手段。在其定义看来,一个URI可以作为定位符、名称或者两者的结合。通用URI语法由方案(scheme),权威(authority),路径(path),查询(query)和片段(fragment)组成:

      URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

      hier-part   = "//" authority path-abempty
                  / path-absolute
                  / path-rootless
                  / path-empty

可以看到从语法层面上来讲,URL与URI是存在一定的区别。关于语法区别的更多部分,可以详细阅读RFC文档。

类比于显示中的姓名、地址用来标志人,URL、URN的本意也是用来标识资源,因此统一为URI。

参考:

URI讨论:RFC1630 https://www.w3.org/Addressing/rfc1630.txt

URI语法:RFC3986 https://tools.ietf.org/html/rfc3986

使用URI还是URL?由于URN目前没有实用价值,容易混淆的概念只在于URI和URL。作为应用开发者的我们,对URI和URL的区别通常只在于命名,我的看法是:

  • 根据API来命名,要什么,给什么。
  • 在Web中通常需要的是具体的资源位置,因此一般使用URL

总结

本篇分析了URL,URN,URI的具体定义,他们的实际使用情况。标准在抽象、概念上很有意义,但实际开发中,往往看事实。

即使到本篇末尾,URL,URI,URN在我心仍然混乱的纠缠在一起,就像XML在我心中一样,这与其定义之初就比较抽象,相关文档也比较混乱有关。幸好实际使用并不需要太过纠结,除非涉及相关底层开发,了解到这个层次即可。

有些人会拿一些语言、库对URI,URL的理解来作为对URI,URL的理解,我认为这种方式不太正确。语言和库对URI,URL的理解可以看作其开发人员对RFC定义的相关概念的自我理解,具备一定的实践价值,但本质还是二次知识。

原文地址:https://www.cnblogs.com/redreampt/p/9527791.html

时间: 2024-10-07 14:48:57

理解URI,URL,URN的相关文章

URI URL URN

URI包括URL和URN URI:Uniform Resource Identifier 统一资源定位符 URL:Unirom Resource Locators 统一资源路径 URN:Uniform Resource Names 统一资源名称 URI可以分为URL,URN,或者同时具备locator和names特性 URN好比一个人的名字,确定身份 URL好比一个人的地址,找到的途径 URL是URI的子集 代替web地址时,URI比URL更准确,"URL""这个术语正被弃用

URI URL URN 的区别

区别 首先我们要弄清楚一件事:URL和URN都是URI的子集. 换言之,URL和URN都是URI,但是URI不一定是URL或者URN.为了更好的理解这个概念,看下面这张图片. 通过下面的例子(源自 Wikipedia),我们可以很好地理解URN 和 URL之间的区别.如果是一个人,我们会想到他的姓名和住址. URL类似于住址,它告诉你一种寻找目标的方式(在这个例子中,是通过街道地址找到一个人).要知道,上述定义同时也是一个URI. 相对地,我们可以把一个人的名字看作是URN:因此可以用URN来唯

URI URL URN 之间的区别

URI  uniform resource identifier,统一资源标识符,用来唯一的标识一个资源 URL uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且                  还指明了如何locate这个资源 URN uniform resource name,统一资源命名,是通过名字来标识资源 URI是以一种抽象的,高层次概念定义统一资源标识 URL和URN则是具体的资源标识的方式 URL和URN都

URI URL URN 关系

我们一起来看下面这个虚构的例子.这是一个URI: http://bitpoetry.io/posts/hello.html#intro 我们开始分析 http:// 是定义如何访问资源的方式.另外 bitpoetry.io/posts/hello.html 是资源存放的位置,那么,在这个例子中, #intro 是资源. URL是URI的一个子集,告诉我们访问网络位置的方式.在我们的例子中,URL应该如下所示: http://bitpoetry.io/posts/hello.html URN是UR

URI URL URN 详解

经常听说URL, URI, URN 但它们间的区别不胜明了,下面我们就把它们搞搞清楚: 声明:本文参考http权威指南 URI: 统一资源标示符(Uniform Resource Identifier);用来唯一确定互联网上的一个资源. URI有2中形式:URL和URN URL: 统一资源定位符(Uniform Resource)是URI最常见的形式:URL描述了一台特点服务器上某个资源的特定位置:它们可以明确说明如何从一个精确,固定的位置获取资源.如下图: 大部分URL都遵循一种标准格式,这种

Http权威指南笔记(一) URI URL URN 关系

定义 URI:统一资源标识符(Uniform Resource Indentifier)用来标识服务器上的资源. URL:统一资源定位符(Uniform Resouce Locator)是资源标识符最常见的表示格式 URL格式 URL标准的格式主要包含三部分 1.第一部分方案或者协议(scheme),说明了访问服务器资源所使用的协议,主要有http,https,ftp等. 2.第二部分是服务器的域名或者iP地址及端口号(默认为80) 3.资源的路径及名称 URL的通用格式如下: <scheme>

URI URL URN的区别

一:什么是URI,URL,URN ? URI:Uniform Resource Identifier,统一资源标识符,是一个用于表示互联网上资源名称的字符串 格式:http://www.xxx.com:80/home/index.html?page=2 URL:Uniform Resource Locator,统一资源定位符,描述一台特定服务器上某特定资源的特定位置 URN:Uniform Resource Name,统一资源名称,用名称来定位资源,与资源的位置是无关的 二:区别如图: 总结:

你知道URL、URI和URN三者之间的区别吗

这是一个经典的技术争论,许多人都会自问:URL.URI,很可能还有URN,它们之间的区别是什么.虽然,现在我们简单地把 URN 和 URL 都看做 URI,但严格来说URI可以进一步划分为URL.URN或者这两者的组合,所以了解这三者之间的区别将会非常有趣并让人受益匪浅.如果你恰好在某个地方碰到了这些东西,那么至少应该知道它们的含义. 我认为,尽管对一般人来说,不了解这三个缩略词之间的技术差异以及它们各自的含义并不是什么问题.但是,如果你作为一个计算机科学家.一个Web开发者.一个系统管理员,或

URL、URI和URN

这篇文章旨在于清楚地讲解URL.URI和URN之间的区别,帮助你快速理解这些必备知识.你是不是对这个话题也感到困惑?那么我们开始吧! 起源 这三个缩略词是Tim Berners-Lee在一篇名为RFC 3986: Uniform Resource Identifier (URI): Generic Syntax的文档中定义的互联网标准追踪协议. 引文: 统一资源标识符(URI)提供了一个简单.可扩展的资源标识方式.URI规范中的语义和语法来源于万维网全球信息主动引入的概念,万维网从1990年起使