当你第一次准备建站时,浏览器地址栏里那串字符可能看起来像一堆符号的随机组合。了解每个部分的含义,能帮你准确地向合作者描述网站地址,检查链接是否指向预期位置,并在上线前发现简单的错误。

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

假设你正在搭建一个小型个人项目,一位合作者向你询问首页的地址。你可能只回复一个域名,也可能给出完整的URL。这两种回答服务于不同的目的。域名是互联网基础设施的关键组成部分,它为互联网上任何可用的网络服务器提供了一个人类可读的地址,解决了IP地址难以记忆且可能随时间变化的问题。完整的URL则更进一步:它是互联网上某个唯一资源的地址,也是浏览器用来获取已发布资源(如HTML页面、CSS文档和图片)的关键机制之一。简而言之,域名告诉你该连接哪台服务器,而完整URL则告诉你想要该服务器上的哪个具体资源。12

本文余下部分将用一个假设地址来练习阅读这些组成部分:https://example.org/notes/first-page?view=compact#intro ——这个字符串纯粹是为了演示URL如何拼装而构造的。我们并不声称这个页面真实存在或已经上线。请把它当作一张可以反复拆解和重组的标注图。

在进入下一节之前,值得说明为什么这个区分在日常工作中很重要。如果你只分享一个域名,对方将看到服务器返回的默认页面。如果你分享一个完整URL,对方可以到达特定页面、应用特定设置,甚至看到某个被高亮的部分。选择分享哪种形式,取决于你的指示需要多精确。

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

让我们来标注示例字符串中的每个组成部分。第一段https是方案,它指示浏览器必须使用哪种协议来请求资源;对于网站来说通常是HTTPS或其未加密版本HTTP。权限部分紧跟在分隔符://之后,在我们的例子中包含example.org,这是指向特定网络服务器的域名。2

域名之后是路径:/notes/first-page。路径标识了网络服务器上的一个资源。在早期互联网时代,这样的路径代表服务器上的物理文件位置,但如今它主要是由网络服务器处理的抽象概念,不再对应任何物理实体。路径之后,问号引导查询字符串:view=compact。参数是提供给网络服务器的额外键值对,服务器可以利用它们在返回资源之前做额外处理。最后,井号引导片段:intro。锚点相当于资源内部的一个书签,为浏览器指明应显示该书签位置的内容。值得注意的是,井号之后的部分(也称为片段标识符)永远不会随请求发送到服务器。2

总结本例中的标点规则:冒号加双斜杠的模式将方案与权限部分分隔开,问号标志查询字符串的开始,井号标志片段的开始。这些字符中的每一个都充当地址中一个部分与下一个部分之间的边界。记住这三个边界,你就能用肉眼解析大多数日常URL,无需任何特殊工具。2

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

现在保持示例的主机部分example.org不变,只改变路径。假设你将/notes/first-page替换为/gallery/spring-collection。方案和域名完全相同,但域名之后的字符串现在指向同一服务器上的不同资源。这个观察纯粹是关于地址字符串结构的;我们并未对某台特定服务器会如何响应这两个路径做任何断言。

接下来,保持路径不变但修改查询字符串。将view=compact替换为view=full,即使方案、域名和路径都相同,也会产生一个不同的URL。查询部分为服务器提供额外的指令或上下文,改变它就创建了一个不同的地址。同样,这是关于字符串本身的结构观察。每台网络服务器对参数有自己的规则,要确认某台特定服务器是否处理特定参数,唯一可靠的方式是询问服务器所有者。2

你也可以完全去掉片段。地址https://example.org/notes/first-page?view=compact仍然是一个有效的URL;它只是缺少了指向资源内部特定位置的书签。同样,你可以去掉查询只保留片段,得到https://example.org/notes/first-page#intro。每种组合都是具有不同含义的不同字符串,尽管它们共享相同的域名。练习这些替换有助于建立直觉,了解地址的哪些部分可以独立更改,哪些部分相互依赖。

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

用一句话记录你的地址的用途。对于我们的假设项目,你可以写:“这是我个人笔记集合的着陆页,以紧凑布局显示,滚动到引言部分。”把这句话放在地址旁边,能帮助未来的读者理解你为什么选择这种特定的部分组合,而不是更简单的形式。

将完整地址单独写在一行上,保持它应有的样子:https://example.org/notes/first-page?view=compact#intro ——然后在下方列出每个组成部分及其简短标签。方案:https。域名:example.org。路径:/notes/first-page。查询:view=compact。片段:intro。这个带标签的分解是说明卡的核心。它把一个不透明的字符串变成一组命名的片段,团队中的任何人都可以无歧义地引用。

考虑添加一条简短说明,标注哪些部分是你刻意选择的,哪些是默认值或占位符。在我们的例子中,example.org是保留用于文档的域名,因此你会注明真实项目需要替换为实际域名。路径、查询和片段的值是为了展示地址中每个槽位如何承载不同信息而做的示例选择。明确标注这些决定可以防止日后有人困惑某个值是有意的还是无意的。

手工核对说明卡

检查说明卡上的每个标签是否对应地址字符串中可见的片段。从左开始:确认方案出现在://分隔符之前,确认域名出现在://和路径的第一个正斜杠之间,确认查询紧跟在问号之后。这个从左到右的检查能发现大多数转录错误。

将完整地址从说明卡复制到纯文本编辑器中,逐字符与原始地址对比。留意多余的空格、缺失的斜杠,或者问号出现在应该是井号的位置。纯文本编辑器在这里很有用,因为它们不会像某些富文本工具那样自动格式化或隐藏不可见字符。

记录你发现的任何差异,即使是很小的。路径开头缺少一个正斜杠或查询字符串中错放一个符号,都可能改变浏览器请求的内容。保留一份简短的修正记录,可以建立个人参考资料,供下次从零组装地址时查阅,也能让合作者确信说明卡已经过审查。

步骤 1

在纯文本编辑器中打开你的说明卡,将光标放在地址字符串的最开头。

步骤 2

逐段检查字符串:方案、分隔符、域名、路径、查询标记、查询内容、片段标记、片段内容。对每一段,确认它与说明卡上写的标签一致。

步骤 3

如果任何一段不匹配,立即修正说明卡并记录错误所在,以便在将来的地址中留意相同的模式。

保留说明供以后使用

将完成的说明卡存放在你和你的合作者都能方便找到的地方。共享文档、项目维基页面,甚至聊天频道中的置顶笔记都可以。格式不如可访问性重要;目标是任何需要引用或更新地址的人都能找到分解说明,而不必让你凭记忆再解释一遍。

决定在说明卡旁边包含多少背景信息。有些人偏好最简记录:只有地址和带标签的各部分。另一些人会加上一句关于项目的描述、说明卡的创建日期以及最后核对人。两种方式都没有错。根据地址变更频率和需要阅读说明卡的人数来选择合适的详细程度。

当你的项目增长并添加更多页面时,可以按照相同的模式创建额外的说明卡。随着时间推移,这个集合会成为你网站所有公开地址的轻量清单。在重新设计或更换域名之前审阅这份清单,能帮你发现可能需要更新的地址,也为你与开发者或设计师讨论网站结构提供了具体的起点。

常见问题

域名和URL是同一个东西吗?

不是。域名标识一台网络服务器,而URL是该服务器上某个特定资源的完整地址。每个URL都包含一个域名,但单独的域名并不指定某个特定页面或文件。12

URL中的问号起什么作用?

问号标志查询字符串的开始。问号之后的所有内容都是键值对,为网络服务器提供额外参数。在我们的例子中,view=compact就是查询部分。2

井号后面的片段会发送到服务器吗?

不会。片段标识符,即井号之后的部分,永远不会随请求发送到服务器。它充当资源内部的书签,告诉浏览器在已加载的内容中滚动或聚焦到哪个位置。2