什么是 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 中高亮显示(详细信息将在后续章节中提供)
注意:您可以将 URL 想象成一个普通的邮政地址:协议 代表您要使用的邮政服务,域名 是城市或乡镇,端口 类似于邮政编码;路径 代表您的邮件应送达的建筑物;参数 代表额外信息,例如建筑物内的公寓号;最后,锚点 代表您要邮寄的实际收件人。
注意:URL 有一些额外的部分和一些额外的规则,但它们对于普通用户或 Web 开发者来说并不重要。不用担心,您无需了解它们即可构建和使用功能完整的 URL。
协议
URL 的第一部分是协议,它指示浏览器必须使用哪个协议来请求资源(协议是围绕计算机网络交换或传输数据的规定方法)。通常对于网站,协议是 HTTPS 或 HTTP(其不安全版本)。寻址网页需要这两个协议之一,但浏览器也知道如何处理其他协议,例如 mailto:
(用于打开邮件客户端),因此如果您看到其他协议也不足为奇。
权限
接下来是权限,它由 ://
字符模式与协议分隔。如果存在,权限将同时包含域(例如,www.example.com
)和端口(80
),并用冒号分隔
- 域指示正在请求哪个 Web 服务器。通常这是一个 域名,但也可以使用 IP 地址(但这很少见,因为不方便得多)。
- 端口指示用于访问 Web 服务器上资源的“技术门”。如果 Web 服务器使用 HTTP 协议的标准端口(HTTP 为 80,HTTPS 为 443)来授予对其资源的访问权限,则通常会省略它。否则,它是强制性的。
注意:协议和权限之间的分隔符是 ://
。冒号将协议与 URL 的下一部分分隔开,而 //
表示 URL 的下一部分是权限。
一个不使用权限的 URL 示例是邮件客户端(mailto:foobar
)。它包含协议但未使用权限组件。因此,冒号后面没有两个斜杠,仅作为协议和邮件地址之间的分隔符。
资源路径
/path/to/myfile.html
是 Web 服务器上资源的路径。在 Web 的早期,这样的路径表示 Web 服务器上的物理文件位置。如今,它主要是 Web 服务器处理的一种抽象,没有实际的物理实体。
参数
?key1=value1&key2=value2
是提供给 Web 服务器的额外参数。这些参数是由 &
符号分隔的键/值对列表。Web 服务器可以使用这些参数在返回资源之前执行额外的操作。每个 Web 服务器对参数都有自己的规则,要了解特定 Web 服务器是否处理参数的唯一可靠方法是询问 Web 服务器所有者。
锚点
#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 不安全,并且不再受现代浏览器支持。
其他技术,例如 CSS 或 JavaScript,也广泛使用 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,允许内容创建者将小文件嵌入到文档中。