在准备上线一个网站之前,你会在笔记、文档或与协作者的沟通中频繁提到它的地址。弄清域名和完整URL的区别,能让这些沟通更准确。本文用一个假设地址字符串,逐段拆解每个组成部分,并提供一种简单的记录方法,方便你在自己的项目中复用。

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

域名是互联网基础设施的关键部分,它为网络上任何可用的Web服务器提供一个人类可读的地址。计算机之间通过IP地址互相寻址,IP地址是唯一标识网络上每台设备的数字。人们很难记住这些数字地址,也很难从中判断某台服务器上运行的是什么内容,因此域名的作用就是给每台服务器一个便于阅读和记忆的标签。12

URL(统一资源定位符)是互联网上某个唯一资源的地址,也是浏览器用来获取已发布资源(如HTML页面、CSS文档、图片等)的关键机制之一。理论上,每个有效的URL都指向一个唯一的资源。这意味着域名告诉你正在谈论哪台服务器,而完整URL则告诉你在那台服务器上想要到达的具体资源是什么。3

为了让这个区别更具体,请看下面这个假设地址:https://example.org/notes/first-page?view=compact#intro 。这个地址并不指向一个真实存在的页面,也没有在任何地方发布过,它只是一个供我们拆解字符串、理解各部分如何运作的假设示例。本文将反复回到这个例子,观察各部分之间的关系。

逐段阅读示例地址

方案(scheme)是URL的第一部分,它指示浏览器在请求资源时必须使用的协议。在我们的例子中,https就是方案。对于网站来说,协议通常是HTTPS或其未加密版本HTTP,不过浏览器也能处理其他方案,例如用于打开邮件客户端的mailto。3

接下来是权限部分(authority),它通过字符组合://与方案分隔。在我们的例子中,example.org是权限部分里的域名。域名指明正在请求哪台Web服务器。TLD(顶级域)是域名中最末尾的组成部分;在这里,org是TLD,而example.org整体构成二级域名。34

域名之后是路径,在我们的例子中是/notes/first-page。路径表示到达Web服务器上某个特定资源的路由。路径之后,问号引导查询字符串。本例中,view=compact是查询部分,它是一个键值对,为Web服务器提供额外参数。最后,井号引导片段标识符。这里intro是片段,它相当于资源内部的一个书签,告诉浏览器显示该书签位置的内容。3

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

现在让我们保持示例地址的主机部分不变,观察当路径或查询发生变化时会怎样。字符串https://example.org/about保持了相同的方案和域名,但使用了不同的路径。字符串https://example.org/notes/second-page同样保持相同的主机,只是路径指向了另一个位置。在每种情况下,域名部分完全相同,只有域名后面的路由发生了变化。观察这一点有助于你理解:域名标识的是服务器,而路径则缩小范围,指明你在该服务器上引用的是哪个资源。

你也可以对比查询字符串变化或消失时的情况。地址https://example.org/notes/first-page?view=compact包含一个查询,而https://example.org/notes/first-page则完全省略了查询。两个字符串共享相同的方案、域名和路径,但一个在问号后携带了额外参数,另一个没有。片段的工作方式相同: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。

在说明卡上同时记录你做出每个选择的理由。为什么选择这样的路径结构?在我们的例子中,/notes/first-page暗示了一个名为notes的栏目和一个名为first-page的页面。为什么要包含查询?答案很简单,假设场景需要一个紧凑显示模式,所以view=compact捕捉了这个意图。为什么加上片段?片段intro标记了页面中某个读者可能想直接跳转到的特定区域。这些选择都不需要知道真实服务器会如何表现,它们只是关于如何描述字符串的决定。

保持说明卡简短而集中。一段文字或一个包含部分名称、值和简短备注三列的小表格就足够了。重点是创建一个你之后可以快速浏览的参考,当你需要解释某个地址的含义,或者检查你写的链接是否与预期一致时,它能帮上忙。如果你的项目最终有多个地址,可以为每个地址做一张卡,把它们放在同一份文档里。

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

手工抄写地址并逐段标注,是在你分享地址之前发现错误的直接方法。这个核对步骤是基于常见笔记习惯的作者建议,不是任何规范的要求。整个过程只需要几分钟,却能帮你避免分享一个带有拼写错误或缺少某个部分的地址。

检查你的说明卡与原始字符串是否一致,在标注完成后再做最后一次比对。把完整地址读出声来,逐字符与你写在卡片上的内容对照。注意问号是否出现在查询之前,井号是否出现在片段之前。一个常见的错误是把这两个分隔符的位置搞混,或者完全忘记其中一个。如果一切吻合,你的说明卡就可以使用了。

如果发现不匹配的地方,修正说明卡并重新做一次标注。你不需要任何特殊工具,一个纯文本编辑器甚至手写笔记都可以。这个练习的价值不在于格式,而在于放慢速度、逐一审视每个部分的动作本身。一旦说明卡通过了这项检查,你就可以把它归档到项目笔记中。

步骤 1

把完整地址字符串手工抄写到文本编辑器或笔记本的一行空白处。不要粘贴,手动输入会迫使你注意到每一个字符。

步骤 2

在每个分隔符之前画一条竖线或插入一个空格:在://之后、路径的第一个/之前、?之前、以及#之前。这样就把字符串分成了几个可见的部分。

步骤 3

在每段的上方或旁边标注名称:方案、域名、路径、查询、片段。将这些标注与说明卡上的条目逐一对照。

保留说明供以后使用

说明卡核对完成后,把它存放在你之后确实会查看的地方。项目维基、共享文档、甚至任务管理器里的一条置顶笔记都可以。格式不如习惯重要——关键是养成在需要引用地址时回来看卡的习惯。如果你后来增加了更多页面或修改了路径,同时更新说明卡,让它保持准确。

自行决定保留多少细节。有些人只记录完整地址和一行用途说明,有些人会加上逐段拆解和每个选择的理由。两种方式都没有错,合适的详细程度就是能让你或协作者快速理解地址含义、而不必从头推导的那个程度。如果你的项目增长,你也可以标注哪些地址是稳定的、哪些你预计会变动,不过这属于个人组织选择而非技术要求。

这种把地址各部分含义写下来的做法,对一个假设例子来说可能显得多余,但它的扩展性很好。当你最终在真实项目中处理实际地址时,同样的说明卡格式无需修改就能直接适用。到那时你已经能熟练地辨认方案、域名、路径、查询和片段,并且拥有了一套可重复的记录方法。这种熟悉感,正是现在做这个练习的真正收获——在上线压力让仔细阅读变得更困难之前,先把方法练熟。

常见问题

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

不是。域名用一个人类可读的标签来标识一台Web服务器,而URL是该服务器上某个具体资源的完整地址。URL包含域名,还包含方案、路径,以及可选的查询和片段等其他部分。13

URL中的问号代表什么?

问号引导查询字符串,查询由键值对组成,为Web服务器提供额外参数。在本文使用的例子中,?view=compact就是查询部分。3

分享链接时必须带上片段吗?

不一定。片段指向资源内部的某个特定位置,相当于一个书签。如果你希望别人直接看到页面的某个区域,就带上片段;如果只是希望他们到达页面本身,省略片段链接仍然有效。3