与 URI(Uniform Resource Indentifier:统一资源标识符) 相比,大多数人可能更熟悉 URL(Uniform Resource Locator:统一资源定位符)。两者有什么区别吗?如果直接从中文翻译名称来看,它们之间的不同就在于“标识”和“定位”两个词语的差别。那么“标识”和“定位”的却别究竟在哪里呢?本文就让我们一起来认识一下 URI 和 URL。

URI:统一资源标识符

URI 是 Uniform Resource Indentifier 的缩写,即统一资源标识符。来看看官方的(RFC2396)标准文档对这 3 个词语的解释:

  • Uniform:规定统一的格式可以方便的处理多种不同类型的资源,而不用根据上下文环境来识别资源的访问方式。
  • Resource:资源的定义是“可标识的任何东西”。不仅仅是文档文件,图像或视频资料。服务(例如天气预报)能够区别与其他类型的都可以称为资源。而且可以是单一的,也可以是多个的集合。
  • Indentifier:表示标识的对象(也称作标识符)。

简单来说,URI 就是由某个协议方案表示的定位资源的标识符。是将一个资源与另一个资源区分开来的字符序列。我们熟悉的 URL 地址,例如 http://www.yaohaixiao.com。采用 HTTP 的时候,“协议方案”就是 HTTP。URI 支持的协议方案有 30 种左右(ftp、mailto、file、news 等)。

URI 格式

完整(绝对路径)的 URI 地址包括以下几点:

  • 协议(protocol):采用的协议方案;
  • 登录信息(username & password):(可选项)指定用户名和密码,用来从服务器获取资源时的认证信息;
  • 服务器地址(hostname):待访问的服务器地址。可以是域名形式也可以是 IP 地址;
  • 服务器端口号(port):指定服务器连接网路的端口号;
  • 带层次的文件路径(pathname):指定服务器上的文件路径来定位特指的资源;
  • 查询字符串(search):(可选项)查询字符串参数;
  • 片段标识符(hash):(可选项)用来标记已获取资源中的子资源;

URI 的类型

有两种类型的 URI:URN 和 URL。

统一资源名称 (URN) 是遵循“urn”方案的持久且与位置无关的标识符。在这种情况下,“持久”意味着 URN 随着时间的推移持续识别相同的资源。以下是 RFC 3986 提供的 URN 示例:urn:oasis:names:specification:docbook:dtd:xml:4.1.2

另一方面,URL 表示的是资源的地点,URL 是依赖于位置的标识符,不一定是持久的。这意味着,随着时间的推移,不需要 URL 来标识相同的资源。URL 也不遵循“urn”方案。而在 URI 用来表示资源地址情况下,就可以用 URL 替换 URI。

URL:统一资源定位符

URL 是 Uniform Resource Locator 的缩写,即统一资源定位符。URL 就是一个给定的独特资源在 Web 上的地址,所以才叫它资源定位符。它不仅标识资源,而且告诉您如何访问它或它位于何处。理论上说,每个有效的 URL 都指向一个唯一的资源。这个资源可以是一个 HTML 页面,一个 CSS 文档,一张图篇,等等。

绝对 URL 和相对 URL

在介绍 URI 格式的时候,使用的就是绝对 URL 地址,另外还有一个叫做相对 URL 的东西。我们来看看这个区别意味着什么呢?

URL 的必需部分在很大程度上取决于使用 URL 的上下文。在浏览器的地址栏中,网址没有任何上下文,因此您必须提供一个完整的(或绝对的)URL,就像我们上面看到的一样。

相对 URL,是指从浏览器中基本 URI 处指定的 URL,例如:/images/logo.png。如果 URL 的路径部分以“/”字符开头,则浏览器将从服务器的顶部根目录获取该资源,而不引用当前文档给出的上下文。

在使用这两种 URL 时,站点的资源文件(例如:js、css)建议使用相对 URL 路径来提高加载效率。

<link href="/static/css/chunk-libs.4eb858a1.css" rel="stylesheet">

内容文件路径则使用绝对的比较好,特别是调用的内容为外部资源的时候。

<img src="https://www.othersite.com/absolute-uri-path.png" alt="absolute uri path" width="480" height="100"/>sheet">

语义 URLs

人是 Web 的核心,因此建立所谓的 semantic URLs 被认为是最佳实践。语义 URL 使用具有固有含义的单词,任何人都可以理解,无论他们的技术水平如何。创建人类可读的 URL 有很多优点:

  • 操作它们更容易;
  • 它根据用户在哪里,他们在做什么,他们正在阅读或在网络上进行互动来澄清用户的情况;
  • 一些搜索引擎可以使用这些语义来改进相关页面的分类;

最直接的语义 URLs 例子就是本文的 URL 地址: http://www.yaohaixiao.com/blog/understanding-uri-and-url/,看到这个 URL 地址,你大概就明白本文要讲述的内容了。

URI 和 URL 之间有什么区别?

URI 和 URL 之间的主要区别在于 URI 是标识符,而 URL 是定位器。换句话说,URI 只是标识资源。它不描述或暗示如何定位资源。换言之,URL 是指定位置的 URI,而 URI 同时指定名称和位置的。

因此,URL 是 URI 的特定子集。这意味着,所有 URL 都是 URI,但并非所有 URI 都是 URL。

用于理解 URI 和 URL 之间差异的最常见类比是比较一个人的姓名与他的家庭地址。一个人的名字就像一个 URI,因为它在不提供任何关于如何定位他的信息的情况下识别这个人。但是,家庭地址会将该人标识为该地址的居民并提供其实际位置,就像一个 URL。

另一个主要区别是 URI 可用于识别和区分 HTML、XML 和其他文件。而 URL 只能用于识别和定位网页。

好了,关于 URI 和 URL 的相关知识点的基本就介绍完了。由于网络上有数以百万计的资源,因此了解识别和定位单个资源的正确方法非常重要。希望看完文本,你对 URI 和 URL 能有一个清晰的了解。

分类: Blog