准备第一个网站时,「域名」和「URL」这两个词会反复出现。它们相互关联但回答的问题不同,混淆二者会让规划站点结构变得比必要的更复杂。本文用一个假设地址展示每个部分的含义,并说明如何为自己保留一份清晰的记录。

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

域名回答的问题是「我要访问哪台服务器」。它为互联网上可用的网络服务器提供了一个人类可读的地址,取代了难以记忆且可能随时间变化的数字IP地址。完整URL回答的问题更广泛:「在那台服务器上,我要获取哪个具体资源,浏览器应该用什么方式去取?」URL是互联网上唯一资源的地址,也是浏览器用来获取HTML页面、CSS文档、图像等已发布资源的关键机制之一。12

为了把概念落到实处,考虑一个假设的项目地址:https://example.org/notes/first-page?view=compact#intro。这个字符串纯粹用作拆解练习,并不指向一个真实存在或已上线的页面。其中域名部分是example.org,字符串中其余所有内容都在进一步说明要获取什么、如何显示。

域名由若干部分组成,各部分以圆点分隔,从右向左阅读。在example.org中,最右边的「org」是顶级域,它告诉用户该域名背后服务的一般用途;「example」是二级域。两者合在一起构成标识一台服务器的域名。完整URL把这个域名包裹在一个更大的字符串里,还额外指定了协议、路径、可选参数和可选锚点。12

拆解示例地址的各个部分

假设地址 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=compact 与 https://example.org/notes/first-page?view=full。两个地址的路径完全相同,意味着请求的是同一个资源,只有查询参数发生了变化。由于每台网络服务器对参数有自己的处理规则,仅凭URL字符串无法假定服务器会如何响应不同的参数值。字符串告诉你正在请求什么,服务器决定如何处理。2

记录这些观察,归纳为一条简单原则:域名标识服务器,路径标识该服务器上的资源,查询提供服务器可能执行也可能不执行的附加指令。这条原则帮助你预判哪些地址改动一定会产生不同结果,哪些改动取决于你从地址本身看不到的服务器端行为。

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

用一个小表格或一段纯文本来创建一张地址说明卡。卡片应包含四个字段:页面用途、完整URL字符串、按角色标注的各部分列表,以及一句简短说明解释你为什么选择该路径或查询值。对于本例,用途可以写成「个人笔记本中第一篇笔记的紧凑阅读视图」。

在卡片中填入前面识别出的五个部分:方案https、权限example.org、路径/notes/first-page、查询view=compact、片段intro。在每个部分旁边写一句话说明它控制什么。方案控制协议。权限控制哪台服务器接收请求。路径控制该服务器上哪个资源被定位。查询传递可选指令。片段标记返回资源内的一个位置。

检查卡片中是否有对你的项目而言可选的部分。在本例中,片段intro是可选的,因为它只影响页面加载后浏览器滚动到哪里。查询view=compact也是可选的,因为路径本身已经能标识一个资源。标注哪些部分是必需的、哪些是装饰性的,有助于日后向合作者或在文档中清晰地传达这个地址。

手工核对说明卡

手工核对能捕捉到眼睛在阅读熟悉字符串时容易跳过的拼写错误和遗漏的分隔符。下面的过程只用到复制和标记,不需要特殊工具。

如果某个部分缺失或拼写有误,修正卡片后从头重新检查一遍。这个循环只需一分钟,却能防止分享地址时出现断链或混淆的错误。

把核对过的卡片保存在与其他项目笔记相同的文件或文件夹中。集中存放意味着每次需要把地址粘贴到链接、文档或与合作者的对话中时,都能直接复制准确的字符串。

步骤 1

从说明卡中复制完整的URL字符串,粘贴到一个空白文本文件中。不要凭记忆重新输入,使用你已经记录下来的原始字符串。

步骤 2

从左侧开始,在每个边界字符处插入一个空格或换行:在 https:// 之后断一次,在 example.org 之后断一次,在问号之前断一次,在井号之前断一次。最终应得到五个可见的片段。

步骤 3

将每个片段与卡片中标注的各部分逐一对照。确认方案一致、权限一致、路径一致、查询的键和值一致、片段标识符一致。

保留记录供日后使用

把地址说明卡和其他项目规划笔记放在一起。卡片在上线初期最有用,那时你还在决定创建哪些页面、如何命名路径。每次新增页面时,用同样的四个字段写一张新卡片。随着时间推移,这组卡片就成为站点结构的简易地图。

向合作者分享地址或在文档中引用时,从卡片粘贴而不是重新输入字符串。这个习惯能减少在路径或查询中引入拼写错误的概率,因为这些部分最容易包含外观相似的字符,例如连字符和下划线。

这不需要任何特殊软件。一个纯文本文件、一条笔记或电子表格中的一行都可以。重要的选择是一致性:每次使用相同的格式,这样未来的你可以快速浏览列表,找到需要的地址,而不必凭记忆重新推导。

常见问题

example.org是一个可以访问的真实网站吗?

不是。本文中example.org纯粹用作拆解URL各部分的假设字符串。地址 https://example.org/notes/first-page?view=compact#intro 并不指向一个已创建或已发布的页面。

分享页面地址时必须带上片段部分吗?

片段只告诉浏览器在加载页面后滚动到哪里。如果分享地址时省略片段,接收者仍然会到达同一个资源,只是不会被自动滚动到特定位置。2

修改查询参数会改变页面本身吗?

查询向服务器提供可选指令,每台服务器对参数有自己的处理规则。改变查询值可能产生可见差异,也可能不产生,取决于服务器如何设置。仅凭URL字符串无法判断。2