第一次准备个人网站或小型项目时,浏览器地址栏里那串字符往往看起来是一个不可分割的整体。把它拆分成各个组成部分,能帮助你更清楚地描述自己的站点、更早发现拼写错误,也能在与协作者沟通地址时减少混淆。

域名与完整URL分别回答什么问题

假设你正在搭建一个小型项目网站,朋友问了两个不同的问题:“你的站点在互联网上的哪个位置?”和“我怎么到达那个站点上的某个具体页面?”第一个问题指向域名,第二个问题指向完整URL。域名是互联网上任何可用网络服务器的人类可读地址,它的存在是为了让人不必记忆数字形式的IP地址——计算机处理IP地址毫无困难,但人类很难记住它们。URL是统一资源定位符的缩写,它是互联网上某个唯一资源的地址,也是浏览器用来获取已发布资源(如HTML页面、图片和文档)的关键机制之一。12

在我们的假设场景中,项目位于example.org,这就是域名。当你想让别人访问该项目上的某个特定页面时,你需要一个完整的URL,它包含域名以及告诉浏览器具体加载哪个资源的附加部分。这个区别很重要:域名本身只标识了服务器,而完整URL标识的是该服务器上的某个特定资源。12

接下来的内容将围绕一个假设地址展开:https://example.org/notes/first-page?view=compact#intro。这个字符串并不指向一个真实存在或已上线的页面,它是一个专门构造的示例,用来练习阅读和标注网站地址的各个组成部分。

在本例中标出各个组成部分

示例地址 https://example.org/notes/first-page?view=compact#intro 包含五个不同的部分。协议是https,它指示浏览器必须使用哪种协议来请求资源。域名是example.org,它告诉浏览器应联系哪台网络服务器。路径是/notes/first-page,它标识该服务器上的一个具体资源。查询是view=compact,由问号字符引导。片段是intro,由井号字符引导。2

问号充当路径与查询之间的边界,问号之后、井号之前的内容都属于查询部分。井号标记片段的起始位置。片段不会随请求发送到服务器,它只是给浏览器提供指引,让浏览器显示资源内部某个被标记位置的内容。2

记住各部分顺序的一个简便方法是:协议、域名、路径、查询、片段。并非每个URL都包含全部五个部分,有些地址在路径之后就结束了,有些则完全省略查询。但当五部分同时出现时,像本例这样从左到右依次阅读,总能得到正确的拆分结果。2

保持主机不变,对比不同路径与查询

现在保持示例的主机部分example.org不变,只改变路径和查询。考虑三个假设地址:https://example.org/notes/first-page、https://example.org/notes/second-page 和 https://example.org/notes/first-page?view=full。前两个共享相同的协议、域名和目录段/notes/,但最后一个路径段不同。第三个与第一个路径相同,却携带了不同的查询值。这三个字符串彼此不同,浏览器会将它们视为各自独立的请求。

注意,将路径段从first-page改为second-page,至少从字符串层面看改变了URL所指向的资源。将查询从view=compact改为view=full,则完全没有改变路径本身,只是改变了随请求附带的额外参数。这里描述的是字符串的外观和结构差异,并不对任何特定服务器会如何处理这些字符串做出断言,因为服务器行为取决于站点的构建方式。

在规划自己的项目页面时,值得记住路径变化与查询变化之间的这个区别。路径通常命名你想要的页面或资源,而查询参数通常添加可选的指令或筛选条件。在接下来制作说明卡时把两者分别记录,有助于日后更容易发现错误。

为假设项目制作一张地址说明卡

记录一张简短的说明卡来描述你的假设项目。卡片应包含四个字段:一句话说明目的、完整地址字符串、各部分的标注分解,以及一条注明该地址是真实还是假设的备注。对于本例,目的可以写成:“一个用于在正式启动真实项目站之前学习URL结构的练习地址。”完整地址为 https://example.org/notes/first-page?view=compact#intro。分解列出协议为https、域名为example.org、路径为/notes/first-page、查询为view=compact、片段为intro。备注说明这是一个构造的示例,不是一个已上线的页面。

把说明卡保存在纯文本文件或简单的笔记工具中。纯文本能避免格式问题,方便你日后将地址复制到浏览器、文档或发给协作者的消息中。把卡片放在你会经常查看的位置,比如项目文件夹或专门的笔记区域,这样需要核对链接时能方便找到。

如果你的项目最终会有多个页面,计划为每个地址单独做一张卡片,而不是把所有内容塞进一段话里。每张卡片只关注一个URL,这样在日后回顾时不容易混淆路径或查询值。

通过手工复制与逐项标记核对说明卡

在依赖任何地址说明卡之前,逐字符对照原始字符串进行检查。以下步骤是基于普通校对实践的作者建议,并非来自任何规范或资料文档的要求。

检查卡片上协议、域名、路径、查询和片段的标注是否与实际字符串中的边界一一对应。如果任何标注偏差哪怕一个字符,立即修正并从地址开头重新通读一遍。

这些步骤只需几分钟,但能防止那种在你与他人分享地址或将地址粘贴到另一个工具时造成混淆的小拼写错误。

步骤 1

从说明卡上完整复制地址字符串到一行空白文本中,逐字保留原样,不增不减。

步骤 2

在协议之后、域名之后、路径之后、查询之后各放置一条竖线或斜杠标记,使每个片段在视觉上彼此分隔。

步骤 3

逐段朗读每个标注片段,并与说明卡上对应字段进行比对。如果某一段不匹配,修改卡片内容后从第一步重新开始。

保留这份说明供以后使用

说明卡通过核对步骤后,把它和其他项目笔记放在一起。当你撰写文档、起草给协作者的消息,或者只是想提醒自己站点地址的结构时,这张卡片都会派上用场。卡片格式让你能方便地只复制域名部分,也能在有人要求某个特定页面的直接链接时复制完整URL。

选择一个与你已有项目文件组织方式匹配的存储位置。有些人喜欢用一个文本文件按顺序列出所有地址卡片,有些人则在专用文件夹中为每张卡片建一个独立文件。两种方式都可以,只要你能在需要时快速找到。重要的是保持一致性:每张卡片使用相同的格式,这样日后浏览时会感到熟悉。

当你的项目从假设规划进入真实上线阶段,可以用相同的结构创建新的卡片,把示例域名替换为你实际使用的域名。标注方法保持不变,因为无论使用哪个域名,URL的组成部分都是一样的。你此前用example.org做的练习为这一过渡提供了可靠的模板。

常见问题

URL中的片段部分会被发送到网络服务器吗?

不会。片段出现在井号之后,它不会随请求发送到服务器。它的作用只是给浏览器提供指引,让浏览器显示资源内部某个特定位置的内容。2

每次写URL都需要包含全部五个部分吗?

不需要。并非每个URL都包含全部五个部分。有些地址在路径之后就结束了,有些完全省略查询。只有当需要精确定位资源及其内部位置时,协议、域名、路径、查询和片段才会同时出现。2

域名和URL的区别是什么?

域名用人类可读的地址标识一台网络服务器。URL是某个特定资源的完整地址,它包含域名以及协议、路径、查询和片段等附加部分,告诉浏览器具体要获取什么。12