什么是 URL?

本文将讨论统一资源定位符 (URL),解释它们是什么以及它们的结构。

预备知识 您需要先了解 互联网是如何工作的Web 服务器是什么 以及 Web 上链接背后的概念
目标 您将了解 URL 是什么以及它在 Web 上是如何工作的。

总结

URL (Uniform Resource Locator,统一资源定位符) 是互联网上唯一资源的地址。它是 浏览器 用于检索已发布资源(如 HTML 页面、CSS 文档、图像等)的关键机制之一。

理论上,每个有效的 URL 都指向一个唯一的资源。实际上,有一些例外,最常见的是 URL 指向一个已不存在或已移动的资源。由于 URL 所代表的资源和 URL 本身由 Web 服务器处理,因此由 Web 服务器所有者负责仔细管理该资源及其关联的 URL。

基础:URL 的组成部分

以下是一些 URL 示例

https://mdn.org.cn
https://mdn.org.cn/en-US/docs/Learn_web_development/
https://mdn.org.cn/en-US/search?q=URL

您可以在浏览器的地址栏中输入以上任意一个 URL,以告诉浏览器加载相应的资源,这三个示例都是 Web 页面。

URL 由不同的部分组成,有些是必需的,有些是可选的。最重要的部分已在下面的 URL 中高亮显示(详细信息将在后续章节中提供)

full URL

注意:您可以将 URL 想象成一个普通的邮政地址:协议 代表您要使用的邮政服务,域名 是城市或乡镇,端口 类似于邮政编码;路径 代表您的邮件应送达的建筑物;参数 代表额外信息,例如建筑物内的公寓号;最后,锚点 代表您要邮寄的实际收件人。

注意:URL 有一些额外的部分和一些额外的规则,但它们对于普通用户或 Web 开发者来说并不重要。不用担心,您无需了解它们即可构建和使用功能完整的 URL。

协议

Scheme

URL 的第一部分是协议,它指示浏览器必须使用哪个协议来请求资源(协议是围绕计算机网络交换或传输数据的规定方法)。通常对于网站,协议是 HTTPS 或 HTTP(其不安全版本)。寻址网页需要这两个协议之一,但浏览器也知道如何处理其他协议,例如 mailto:(用于打开邮件客户端),因此如果您看到其他协议也不足为奇。

权限

Authority

接下来是权限,它由 :// 字符模式与协议分隔。如果存在,权限将同时包含(例如,www.example.com)和端口80),并用冒号分隔

  • 域指示正在请求哪个 Web 服务器。通常这是一个 域名,但也可以使用 IP 地址(但这很少见,因为不方便得多)。
  • 端口指示用于访问 Web 服务器上资源的“技术门”。如果 Web 服务器使用 HTTP 协议的标准端口(HTTP 为 80,HTTPS 为 443)来授予对其资源的访问权限,则通常会省略它。否则,它是强制性的。

注意:协议和权限之间的分隔符是 ://。冒号将协议与 URL 的下一部分分隔开,而 // 表示 URL 的下一部分是权限。

一个不使用权限的 URL 示例是邮件客户端(mailto:foobar)。它包含协议但未使用权限组件。因此,冒号后面没有两个斜杠,仅作为协议和邮件地址之间的分隔符。

资源路径

Path to the file

/path/to/myfile.html 是 Web 服务器上资源的路径。在 Web 的早期,这样的路径表示 Web 服务器上的物理文件位置。如今,它主要是 Web 服务器处理的一种抽象,没有实际的物理实体。

参数

Parameters

?key1=value1&key2=value2 是提供给 Web 服务器的额外参数。这些参数是由 & 符号分隔的键/值对列表。Web 服务器可以使用这些参数在返回资源之前执行额外的操作。每个 Web 服务器对参数都有自己的规则,要了解特定 Web 服务器是否处理参数的唯一可靠方法是询问 Web 服务器所有者。

锚点

Anchor

#SomewhereInTheDocument 是指向资源本身另一部分的锚点。锚点代表资源内的某种“书签”,为浏览器提供了显示位于该“书签”位置的内容的指示。例如,在 HTML 文档中,浏览器将滚动到定义锚点的位置;在视频或音频文档中,浏览器将尝试转到锚点表示的时间。值得注意的是,# 之后的这部分,也称为片段标识符,在请求中永远不会发送到服务器。

如何使用 URL

任何 URL 都可以直接在浏览器的地址栏中键入以访问其背后的资源。但这只是冰山一角!

HTML 语言(请参阅 HTML 结构化内容)广泛使用 URL

  • 通过 <a> 元素创建到其他文档的链接;
  • 通过 <link><script> 等各种元素将文档与其相关资源链接起来;
  • 显示媒体,例如图像(使用 <img> 元素)、视频(使用 <video> 元素)、声音和音乐(使用 <audio> 元素)等;
  • 通过 <iframe> 元素显示其他 HTML 文档。

注意:在指定 URL 以加载页面的一部分资源时(例如使用 <script><audio><img><video> 等),您通常应只使用 HTTP 和 HTTPS URL,有极少数例外(一个值得注意的例外是 data:;请参阅 Data URLs)。例如,使用 FTP 不安全,并且不再受现代浏览器支持。

其他技术,例如 CSSJavaScript,也广泛使用 URL,而这些确实是 Web 的核心。

绝对 URL 与相对 URL

我们上面看到的称为绝对 URL,但还有一个称为相对 URL 的概念。 URL 标准定义了两者 — 尽管它使用术语 绝对 URL 字符串相对 URL 字符串,以区别于 URL 对象(它们是 URL 的内存表示)。

让我们在 URL 的上下文中检查一下绝对相对之间的区别意味着什么。

URL 的必需部分在很大程度上取决于 URL 使用的上下文。在浏览器的地址栏中,URL 没有上下文,因此您必须提供一个完整(或绝对)的 URL,就像我们上面看到的那些。您不需要包含协议(浏览器默认使用 HTTP)或端口(只有在目标 Web 服务器使用非标准端口时才需要),但 URL 的所有其他部分都是必需的。

当 URL 在文档中使用时(例如在 HTML 页面中),情况略有不同。由于浏览器已经拥有文档本身的 URL,它可以利用此信息来填充该文档中任何 URL 的缺失部分。我们可以通过只查看 URL 的路径部分来区分绝对 URL相对 URL。如果 URL 的路径部分以 / 字符开头,浏览器将从服务器的顶层根目录获取该资源,而无需参考当前文档提供的上下文。

让我们看一些例子来进一步说明。假设 URL 是从以下 URL 定位的文档中定义的:https://mdn.org.cn/en-US/docs/Learn_web_development

https://mdn.org.cn/en-US/docs/Learn_web_development 本身是一个绝对 URL。它具有定位其指向资源所需的所有必要部分。

以下所有 URL 都是相对 URL

  • 协议相对 URL://mdn.org.cn/en-US/docs/Learn_web_development — 只缺少协议。浏览器将使用与加载托管该 URL 的文档相同的协议。
  • 域名相对 URL:/en-US/docs/Learn_web_development — 协议和域名都已丢失。浏览器将使用与加载托管该 URL 的文档相同的协议和相同的域名。
  • 子资源:Howto/Web_mechanics/What_is_a_URL — 协议和域名丢失,路径不以 / 开头。浏览器将尝试在当前资源所在的子目录中查找文档。在这种情况下,我们真正想访问的 URL 是:https://mdn.org.cn/en-US/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL
  • 返回目录树:../CSS/display — 协议和域名丢失,路径以 .. 开头。这继承自 UNIX 文件系统 — 告诉浏览器我们想向上移动一级。在这里,我们想访问的 URL 是:https://mdn.org.cn/en-US/docs/Learn_web_development/../Web/CSS/display,可以简化为:https://mdn.org.cn/en-US/docs/Web/CSS/display
  • 仅锚点:#semantic_urls - 除锚点外,所有部分都已丢失。浏览器将使用当前文档的 URL 并替换或添加锚点部分。当您想链接到当前文档的特定部分时,这很有用。

URL 用户名和密码

上面讨论的 URL 部分不如下面描述的常见,您可能会在 URL 中看到包含用户名和密码。

例如

https://username:password@www.example.com:80/

如果包含,用户名和密码会放在 :// 字符和权限之间,两个之间用冒号分隔,末尾用 at 符号 (@)。

当访问使用 HTTP 身份验证安全机制的网站时,可以在 URL 中包含用户名和密码,以立即登录网站并绕过否则会出现的用户名/密码对话框以输入您的凭据。

尽管您可能仍会看到此机制在实际中使用,但由于安全问题,它已被弃用,并且现代网站倾向于使用其他身份验证机制。有关更多详细信息,请参阅 通过 URL 中的凭据访问

语义化 URL

尽管 URL 具有非常技术性的味道,但它们代表了网站的可读入口点。它们可以被记住,任何人都可以将它们输入到浏览器的地址栏中。人是 Web 的核心,因此构建所谓的 语义化 URL 被认为是最佳实践。语义化 URL 使用具有固有含义的单词,这些单词可以被任何人理解,无论其技术知识如何。

语言语义对计算机来说当然是无关紧要的。您可能经常看到看起来像随机字符组合的 URL。但是,创建人类可读的 URL 有许多优点

  • 对您来说更容易操作它们。
  • 它向用户清楚地说明了他们在 Web 上的位置、正在做什么、正在阅读或与之交互的内容。
  • 一些搜索引擎可以利用这些语义来改进相关页面的分类。

另见

Data URLs:以 data: 协议为前缀的 URL,允许内容创建者将小文件嵌入到文档中。