在Web领域,经常会见到几个专业术语,URL、URI以及URN
它们都是用来定位资源的标识符,但用法又有一些区别
URI
URI(Uniform Resource Identifier)中文全称 统一资源标识符,是由因特网工程任务组(IETF)的标准RFC 3986定义的,它是用于标识互联网上的资源的字符串
RFC 3986 - 统一资源标识符 (URI):通用语法 (ietf.org)
在RFC 3986标准中1.1.3小节有这样一段话:
1.1.3. URI, URL, and URN A URI can be further classified as a locator, a name, or both. The term "Uniform Resource Locator" (URL) refers to the subset of URIs that, in addition to identifying a resource, provide a means of locating the resource by describing its primary access mechanism (e.g., its network "location"). The term "Uniform Resource Name" (URN) has been used historically to refer to both URIs under the "urn" scheme [RFC2141], which are required to remain globally unique and persistent even when the resource ceases to exist or becomes unavailable, and to any other URI with the properties of a name.
Web上可用的每种资源( 文档、图像、音频、视频、程序等)都由一个URI进行定位,URI包括URL和URN两种形式
URI只是一种抽象的概念,怎样实现无所谓,只要它唯一标识一个资源,它就可以称之为URI,而它的具体表现形式有用地址定位的URL和用名称定位的URN
URL
URL(Uniform Resource Locator)中文全称 统一资源定位符,它定位了互联网上标准资源的地址
URL有一定的格式,常用格式为:
scheme://host[:port#]/path/…/[;url-params][?query-string][#anchor]
- schme是协议名,表明了浏览器使用哪种协议,最常用的是http和https两种
- host是域名,表明正在请求哪个 Web 服务器
- :port是端口,表示用于访问 Web 服务器上的资源的技术“门”,如果 Web 服务器使用 HTTP 协议的默认标准端口(HTTP 为 80,HTTPS 为 443)来授予其资源的访问权限,则通常会被忽略
- path是访问资源的路径,在 Web 的早期阶段,像这样的路径表示 Web 服务器上的物理文件位置。如今它主要表示在逻辑上由 Web 服务器处理的文件
- url-params是提供给网络服务器的额外参数。这些参数是用
&
符号分隔的键/值对列表。在返回资源之前,Web 服务器可以使用这些参数来执行额外的操作 - query-string是发送给服务器的数据
- anchor是资源本身的另一部分的锚点。锚点表示资源中的一种“书签”,给浏览器显示位于该“加书签”位置的内容的方向
具体使用和示例不再赘述,详细查看:
什么是 URL? - 学习 Web 开发 | MDN (mozilla.org)
URN
URN(Uniform Resource Name)中文全称 统一资源名称,也是URI的一种,它是用来给资源一个独一无二的名称,但不包括位置信息
URN的格式通常包括了命名空间标识符和特定资源的名称,希望为资源指定一个持久的、独一无二的名称,以便在不同的环境中使用
URN 并不关注这个表示名称里是否隐含了该资源的位置,或者如何获取它,也不一定代表该资源一定可用
举个例子,在ISBN(国际标准书号)系统中,一个编号 2-02-033598-0 代表了一个书本资源
使用 URN 查找这本书可以表示为 urn:isbn:2-02-033598-0,但是这个编号并没有给出在哪里或者如何找到这本书,它只能唯一标识这本书
总结
URL用于在网络中使用特定格式的地址定位资源,URN用于给资源一个独一无二的名称,而URI则是一个更加通用的概念,包括了URL和URN
在实际应用中,我们会经常使用URL来访问网页、下载文件等,而URN则更多的用于标识一些特定的资源,而URI只是作为一种表示形式存在