在准备上线网站之前,你会遇到两个相关但不同的概念:域名和完整URL。本文用一个假设地址来展示每个部分如何工作,以及你怎样为自己的项目清晰地记录它们。

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

假设你正在搭建一个小型个人项目网站,朋友问你在哪里可以找到它。如果你只说「example.org」,你给出的是一个域名。域名为互联网上可用的任何网络服务器提供了一个人类可读的地址。计算机本身使用数字IP地址来定位服务器,但人们觉得那些序列很难记住,所以域名充当了更友好的替代。1

现在假设你的朋友想要该网站上的一个特定页面,也许是你写的一篇笔记。你会给他们一个完整的URL,例如 https://example.org/notes/first-page?view=compact#intro。URL是互联网上唯一资源的地址,也是浏览器用来检索已发布资源的关键机制之一。域名回答的是「哪台服务器」,而完整URL回答的是「那台服务器上的哪个确切资源,以及应如何展示它」。2

在本文中,上面的地址纯粹是假设的。它仅作为一个待拆解的字符串使用,让你看到每个片段如何运作。该位置不存在真实页面,本文也没有声称该地址已上线或已注册。目标是在你真正需要一个地址之前进行阅读练习。

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

把完整字符串 https://example.org/notes/first-page?view=compact#intro 写在一行空白处,在每个片段之间画一条竖线。第一个片段 https 是协议方案,它指示浏览器必须使用哪种协议来请求资源。对于网站,协议通常是HTTPS或其未加密版本HTTP。2

下一个片段 example.org 是权威部分,它告诉浏览器正在请求哪台网络服务器。在我们的示例中这就是域名,无论你访问该服务器上的哪个页面它都保持不变。紧随其后的路径 /notes/first-page 指向该服务器上的一个特定资源。路径通过正斜杠与权威部分分隔,可以包含多个类似目录的片段。2

路径之后是一个问号,它引入查询字符串。在我们的示例中查询是 view=compact。问号始终标志着查询参数的开始,这些参数是键值对,可以向网络服务器提供额外信息。最后,井号引入片段标识符,这里是 intro 这个词。片段充当资源内部的书签,为浏览器提供指引以显示位于该书签位置的内容。值得注意的是,片段标识符不会随请求发送给服务器。2

保持主机不变,对比路径与查询字符串

保持 example.org 不变,只替换路径。字符串 https://example.org/about/team 指向的资源与 https://example.org/notes/first-page 不同,尽管服务器是同一台。这说明路径是区分同一主机上不同页面的部分。你可以把域名想象成建筑物,把路径想象成里面的房间号。

现在保持域名和路径都不变,只改变查询。字符串 https://example.org/notes/first-page?view=full 与我们原来的地址仅在等号后面的值上不同。两个地址指向同一服务器上的同一路径,但查询参数暗示了不同的展示方式。我们在这里只是观察字符串的结构;服务器是否真的会根据该参数改变输出,完全取决于该服务器的配置。

去掉片段后得到 https://example.org/notes/first-page?view=compact,它请求相同的资源并传递相同的查询,但不提供滚动到特定位置的指令。添加或删除片段会改变浏览器在屏幕上显示的内容,而不改变服务器接收到的信息。这些小实验帮助你看到每个片段承担不同的角色,改变一个片段不会自动影响其他部分。

为你的项目制作一张地址说明卡

为你项目中的每个重要地址记录一张简短的说明卡。对于我们的假设示例,卡片可以这样写:目的:以紧凑阅读视图显示第一篇笔记。完整地址:https://example.org/notes/first-page?view=compact#intro。主机:example.org。路径:/notes/first-page。查询:view=compact。片段:intro。把这些字段分开写会迫使你注意到每个部分各自的作用。

用一个简单的文本文件或笔记应用来存放这张卡片。格式不重要,只要每个字段单独一行并清楚标注即可。如果你的项目最终有多个页面,给每个页面各做一张卡。随着时间推移,这个集合会成为你分享链接、撰写文档或排查地址问题时的快速参考。

自行决定包含多少细节。有些人还会记录协议方案,尤其是当项目同时使用HTTP和HTTPS变体时。也有人会跳过很少变动的片段。关键在于一致性:一旦选定一组字段,就在所有卡片中保持相同的字段集,这样你以后可以快速浏览它们。

手工核对说明卡

检查你的卡片与原始字符串是否逐字一致。从浏览器或源文档中复制完整URL,粘贴在卡片旁边,逐段对比。缺少一个斜杠、多出一个问号或参数名拼写错误,都是仔细看时容易发现但扫一眼时难以注意的常见问题。

标注粘贴字符串的每个片段:在 https 下方写「协议方案」,在 example.org 下方写「主机」,在 /notes/first-page 下方写「路径」,依此类推。这个标注步骤第一次做时可能觉得多余,但它能培养你刻意阅读地址的习惯。重复几次之后,你会更快发现错误,因为你的眼睛学会了每个边界落在哪里。

用你自己的话写一句话概括这个地址应该做什么,放在卡片顶部。如果你不回头看字符串就写不出那句话,说明某个片段对你来说还不清楚。回去重新阅读那个片段,调整你的卡片,直到概括读起来自然为止。

保留地址说明供以后使用

把完成的卡片存放在你确实会回访的地方。项目文件夹中的一个纯文本文件就很好用,因为它随其余文件一起移动。如果你偏好可视化工具,一个每行一个地址、每列一个字段的电子表格也能达到同样的目的。格式不如养成在添加或更改页面时回看笔记的习惯重要。

当你与合作者分享地址或在文档中书写地址时,从卡片复制而不是凭记忆重新输入。这能减少引入拼写错误的机会。如果地址后来发生了变化,先更新卡片,然后把更正后的字符串传播到所有出现的位置。把卡片当作唯一的事实来源,能保持你的引用一致。

随着时间推移,你可能会发现一些卡片因页面移动或参数变化而过时。这是正常的。定期回顾这个集合,归档不再适用的卡片,为上次回顾以来新引入的地址添加新卡。只要在变化发生时立即更新卡片而不是让它们堆积,维护成本就会保持在很小的范围内。

常见问题

本文中的 example.org 地址是一个可以访问的真实网站吗?

不是。地址 https://example.org/notes/first-page?view=compact#intro 纯粹作为阅读练习的假设字符串使用,本文没有声称它存在或已上线。

查询字符串和片段有什么区别?

查询字符串以问号开头,向网络服务器提供键值参数。片段以井号开头,充当资源内部的书签供浏览器定位,它不会随请求发送给服务器。2

我需要记录我的网站将来可能拥有的每一个URL吗?

不一定。从当前上线或协作中真正重要的地址开始。随着项目增长你可以添加更多卡片,并归档那些已过时的。