读文笔记:认识URI和URL

Category:
发表:

前两天在看图解HTTP,其中有关于url和uri的相关叙述。想起之前我也是对这两个概念理解的很模糊,看了网上的各种资源后,更加感觉摸不着头脑了。所以索性写一篇文章来沉淀一下。

那么,uri和url到底是什么东西呢。其实uri、url、urn是一组概念,用于描述(互联网)资源。这组概念的官方文档是RFC3986,有兴趣的可以自行阅读此文档。

下面主要来说说我自己的理解。

  • uri,全称uniform resource identifier,中文意为统一资源标识符,用一个唯一的标识符来标志一个资源。
  • url,全称uniform resource location,中文意为统一资源定位符(器),是一种具体的uri,它不但标志了一个资源,还给出了资源的定位信息,即指明了如何找到这个资源。
  • urn,全称uniform resource name,中文意为统一资源命名,也是一种具体的uri,通过名字来标志资源。

可以简单的理解这三者都是用来描述(互联网)资源相关信息的。

其中uri和url是经常用到的,下面说说我对他们之间区别的理解。

  • uri相对来说是一种更加广泛的抽象概念。它从更高的层面定义了如何标志一个资源。
  • url是uri的一种,也可以说url是一种具体的uri。url不但可以唯一标志一个资源,还给出了资源的定位信息。

举个例子来说明一下,在一个web服务器上,我们放了一些文件,有图片、视频、文档等等静态文件。此时web服务器上的这些资源都是由uri标志的。什么意思呢?比如有一个图片文件的地址是/wwwroot/public/img/logo.png(路径中的wwwroot为web服务器的根目录),这个路径就是这个图片的uri,它标志了这个图片资源。注意,这里说的uri是相对于这个主机服务器来说的,可以理解为文件资源的存放地址。

现在试想一下,我们在客户端上使用浏览器请求这个图片,假设我们请求的路径是http://test.com/public/img/logo.png,那么这个地址就是这个图片资源的url。这个url不但标志了web服务器上的一个图片资源,而且浏览器可以通过这个url找到这个图片资源(假设这个文件是真实存在的)。

在前面的例子中提到的路径地址http://test.com/public/img/logo.png,它使一个url,同时它也是一个uri。因为我们说url是uri的一种具体实现,也就是说url是uri的子集。所以一个url肯定是一个uri,但是一个uri不一定是一个url。就好像猪可以在地上跑,但是在地上跑的不一定都是猪,一样的道理嘛。

所以,下次万一有面试官问你www.baidu.com是url还是uri?你知道怎么回答了吗?😎