作为一名开发,你肯定已经无数次听到过URL这个名次。也许也在某些场合碰到过URI这个东西。是否在有些时候你会想要了解这两个有什么关系?它们之间有什么区别吗?有时候这两个概念的使用是可以互换的,但细究下去毕竟是有所区别。在对比它们之间的区别之前,让我们把它们放到放大镜之下,具体了解一下这两个老朋友各自的定义是什么。
什么是URL?Uniform Resource Locator或者简称URL— 顾名思义 — 就是对于某种web资源的引用,并且包含了如何获取该资源的方式。 最常见到的场景就是指一个网站的地址,也就是你在浏览器地址栏见到的那个东西。
一个URL由如下几个部分构成:
- 协议: 通常是https或者http。表示通过何种方式获取该资源。你可能还见过其他协议类型,比如ftp或者file
- 协议后面跟着://
- 主机名: 可以是一个已经在DNS服务器注册过的域名 —— 或者是一个IP地址 —— 域名就表示背后的IP地址。一组主要由数字组成的用于标识接入网络的设备的字符串。
- 主机名后面可以指定端口,端口是可选的,如果不指定则使用默认端口,端口和主机名之间通过冒号隔开。
- 资源路径: 用于表示资源在主机上的文件系统路径。
- 可以在这之后通过问号连接可选的查询参数,如果有多个查询参数,通过&符连接
- 最后一项,如果需要的话可以添加#作为需要跳转的页面上的矛点名称。
一个URL的组成部分可以参考下面的图示:
什么是URI?
接下来我们来了解一下究竟什么是URI。与URL相似的部分是,Uniform Resource Identifier同样定义了资源的标识。但不同点在于URI通常不会包含获取资源的方式。
ISBN作为书目的资源定义就是一种URI,但不是URL。它清楚地为每一种出版的书目定义了唯一的数字编号,但没有包含任何如何获取这种资源的方法。
因此我们可以这样总结:URI是URL的超集,URL是URI的子集。每一个URL都必定也是一个URI。
区别图示为了阐明它们之间的关系,可以参见下面的图示
所以实际上URL就是一种特定的URI,这种URI还含有如何获取资源的信息。如果一定需要一句话来总结本文的主要内容,那么RFC3986中的这句定义一定是最合适的:
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.
总结作为开发者会发现我们有无数的英文缩写要了解和记住。但一旦能够更加深入地了解组成互联网基石的核心概念,就会发现上层概念越来越简单,并且由于对于底层概念的了解,实际工作质量也可能越来越高。
,