近期在开始学习网络通讯理论。看的书是业界经典《图解 HTTP》,到 URI,URL 这部分内容的时候,对“URL 是 URI 的子集”这句话没有很好的理解。百度了好些篇文章,还是没能透彻的去区分这二者的区别。然后 google 到了一篇写的比较通俗易懂的文章,打算基于这篇文章,对 URI,URL 的区别做一个概念上的理解,力求通俗。
首先,其实这两个缩写的概念其实全称就已经非常精确的表明了含义,只不过对于初学者,还是比较抽象而已。
URL:Uniform Resource Locator 统一资源定位符;
URI:Uniform Resource Identifier 统一资源标识符;
我们先从字面意思上去尝试理解,然后对这二者的区别进行说明,正是这篇文章的内容。
URL: 关键词 -“ 资源定位 ”,那就是通过写明路径的方式,表示出资源的位置,位置被指定,通常资源也就被指定,例如 302 班 1 列 3 排的同学,身份是能够被确定的。
URI: 关键词 -“ 资源标识 ”,一个名为小明的男同学。我们明确的知道了,有这么个人,性别男,名小明。
目前为止,这些都不难理解。
我们继续讨论:“URL 是 URI 的子集”
我们看这个图:
Your name could be a URI because it identifies you, but it couldn’t be a URL because it doesn’t help anyone find your location. On the other hand, your address is both a URI and a URL because it both identifies you and it provides a location for you.
你的名字可以作为一个 URI(资源标识),因为它能够标识你这个人。但是不能是一个 URL,因为你的名字,不足以让别人知道你的位置,然后找到你。
你的地址既是一个 URI,同时也是一个 URL,因为你的地址,可以暴露你是谁,也可以告诉别人你在哪里。
简单这么说,你可能因为上图更加迷惑了。这是由于我们惯性的思维偏差导致的。我们很容易这样想:URL 包含了地址和资源信息,而 URI 似乎只是指明了资源。好像 URL 的范围大于 URI,所以 URI 应该是 URL 的子集才对啊。
而这正是导致我们不容易理解的根本原因。
上图我们不是很好理解,所以我们换一个图:
可以看到,峨眉山的猴子,即指定了位置,还指明了猴子。但是,对于猴子这一个物种来说,猴子并不只是存在峨眉山中。我们不难理解,峨眉山的猴子只是猴子的一种。峨眉山的猴子是猴子的子集。
再回到上面,对比看看,URL 和 URI 的关系也是如此。URL 只是 URI 的一种。因此 URL 是 UIR 的子集。
【参考】:https://dev.to/flippedcoding/what-is-the-difference-between-a-uri-and-a-url-4455