当你为新建网站规划页面时,需要一种清晰的方式记录每个页面的名称、完整地址和用途备注。本文用一个假设地址构建一份简单的交接清单,你可以复用到自己的项目中。

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

假设你正在整理一个小型个人项目——一组想在线分享的阅读笔记。为了这次练习,我们使用域名 example.org。这是一个仅为说明地址字符串结构而选取的假设示例,我们并不声称该地址下存在任何已发布的真实页面。目标是理解地址中每个部分承载什么信息,以便你在规划自己的页面时能准确记录。

域名提供的是一个人类可读的服务器地址,用于标识互联网上某台可用的网络服务器。它告诉你想要到达哪台服务器,但并不指明你要找的是该服务器上的哪一个具体资源。可以把它想象成只说出了大楼的名字,却没有说出楼里的房间号。域名之所以存在,是因为IP地址对人类来说难以记忆且可能随时间变化,一个可读的标签让服务器更容易被找到和分享。1

完整URL则更进一步。它是互联网上某个唯一资源的地址,将域名与额外的部分组合在一起,指向一份具体的文档、图片或其他文件。域名回答的是「哪台服务器」这个问题,完整URL回答的是「那台服务器上的哪个具体资源」。这个区别对交接清单很重要,因为协作者需要完整的URL才能到达正确的页面,仅靠域名是不够的。2

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

以下是本文通篇使用的完整假设地址:https://example.org/notes/first-page?view=compact#intro ——再次说明,这是一个为学习目的而构造的示例,并非已发布或经过验证的页面。接下来我们按照URL的标准结构逐一识别这个字符串的各个组成部分。

方案部分是 https,它指示浏览器必须使用哪种协议来请求资源。权限部分紧跟在 :// 分隔符之后,包含域名 example.org,告诉浏览器正在请求哪台网络服务器。路径是 /notes/first-page,代表该资源在服务器上的位置。在早期网络中,这样的路径代表服务器上的物理文件位置,但现在它主要是由网络服务器处理的一种抽象,并不对应任何物理实体。2

路径之后是查询字符串,由问号引导:?view=compact ——查询参数是提供给网络服务器的额外键值对,服务器可以利用它们在返回资源之前进行额外处理。最后是片段标识符,紧跟在井号之后:#intro ——这个锚点代表资源内部的一个书签,为浏览器提供方向,使其显示位于该位置的内容。值得注意的是,井号之后的部分永远不会随请求发送到服务器。2

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

现在保持主机部分 example.org 不变,比较两个变体。第一个是 https://example.org/notes/second-page ,第二个是 https://example.org/notes/first-page?view=expanded ——在第一个变体中,只有路径不同:second-page 替换了 first-page。在第二个变体中,路径保持不变,但查询值从 compact 变为 expanded。尽管它们共享相同的域名和方案,这些仍是不同的URL字符串。

将这些字符串并排观察,可以帮助你看到路径和查询承担不同的结构角色。路径标识的是正在请求服务器上哪个资源位置,而查询传递的是服务器可能处理也可能不处理的额外参数。每台网络服务器对参数有自己的规则,了解某台特定服务器是否处理参数的唯一可靠方式是询问服务器所有者。这意味着仅凭字符串本身,你可以观察到结构上的差异,但无法确定服务器实际会返回什么。2

对于你的清单而言,这个观察有一个实际后果:当你记录两个共享同一域名但路径或查询不同的页面时,应该为每一个写出完整的URL,而不是缩写。阅读你笔记的协作者无法安全地猜测一个缺失的查询参数究竟意味着「没有参数」还是「我忘记写了」。写出完整字符串消除了这种歧义,使交接内容自成一体。

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

记录你项目中每个页面一张卡片。每张卡片至少包含三个字段:用简短短语说明页面目的、你期望呈现的完整URL、以及你在前面各节中识别出的各部分拆解。对于我们这个假设的阅读笔记项目,一张卡片可以这样写:目的——以紧凑视图显示第一篇阅读笔记。完整地址——https://example.org/notes/first-page?view=compact#intro ——各部分——方案 https,域名 example.org,路径 /notes/first-page,查询 view=compact,片段 intro。

记录完整地址时,按照它在浏览器地址栏中应当呈现的样子逐字书写,包括方案、所有斜杠、问号和井号。避免在这个字段中改写或缩短URL。如果你的项目有多个页面,为每一个创建单独的卡片,即使它们共享同一个域名。这个习惯能防止日后你或协作者需要区分仅在查询参数或片段上有所不同的页面时产生混淆。

选择一种便于复制粘贴的格式。纯文本文件以每块一张卡片的方式排列效果很好,因为它无需特殊软件即可分享。有些人更喜欢用电子表格,每行一个页面,列分别为目的、完整URL和各部分。两种方式都可以,只要完整地址以单个不间断字符串的形式存储,能够一次性选中并复制即可。格式本身不如每张卡片上信息的完整性和准确性重要。

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

在将清单分享给协作者或存档备查之前,用简单的手工检查验证每张卡片。以下过程不使用自动化工具——只靠你的眼睛和文本编辑器。这些是作者建议的步骤,并非来自任何规范的要求。

检查完整地址中的每一个字符,将其与你的原始来源逐字对照。打开文本编辑器,从卡片中粘贴或输入URL,然后与你在规划阶段记录的版本逐字符比较。特别注意斜杠、问号和井号,因为它们是分隔方案、路径、查询和片段的定界符。

标注工作副本中的每个部分。在每个定界符之后插入一个空格或注释标记,写上部分名称:方案、域名、路径、查询、片段。如果任何标注与卡片上的记录不一致,先修正卡片再继续。这个标注步骤能捕捉常见错误,例如路径段之间缺少斜杠,或者问号被放在了片段之后而非之前。

步骤 1

将完整URL从说明卡复制到文本编辑器的一个空白行中。

步骤 2

从左侧开始,识别方案并标记 :// 分隔符结束的位置。

步骤 3

标记域名部分,在权限之后的第一个单斜杠处结束。

步骤 4

标记路径,如果存在查询则在问号处结束,如果只有片段则跟随在井号处结束。

保留这份记录供以后使用

卡片验证完成后,将它们存放在你确实会回顾的位置。项目目录中的一个文件夹、一个笔记应用或一份共享文档都可以。重要的是记录与其他项目材料放在一起,这样当你需要添加新页面、更新现有地址或向他人解释站点结构时能够找到它。

当项目增长时,为每个新页面添加一张新卡片,而不是编辑现有卡片来覆盖多个地址。这使每张卡片自成一体,避免了一条记录试图描述两个不同URL时产生的混淆。如果某个页面被移除或其地址发生变化,将旧卡片标记为已停用而不是删除它,这样你保留了曾经存在什么以及为何变化的历史。

你的记录方式应当匹配你的工作习惯。如果你与他人协作,电子表格或共享文档这样的格式使交接更顺畅。如果你独自工作,项目文件夹中的纯文本文件可能最简单。无论哪种方式,你建立的这份清单——目的、完整地址、标注各部分——为你提供了一个一致的结构,从单个假设页面扩展到多页站点时无需每次重新发明格式。

常见问题

片段标识符不会发送到服务器,我还需要在说明卡上写它吗?

需要。虽然片段不会随请求发送到服务器,但它告诉协作者这个链接意图到达页面的哪个部分。如果在卡片上省略它,可能导致某人落在页面顶部而非预期位置。2

我可以在卡片上省略方案,只写域名和路径吗?

最好写出包含方案的完整URL。方案告诉浏览器使用哪种协议,省略它会迫使读者猜测页面使用的是HTTP还是HTTPS。写出完整字符串使你的卡片没有歧义。2

如果两个页面路径相同但查询字符串不同,我该怎么办?

为每一个创建单独的卡片,并写出包含查询的完整URL。因为每台网络服务器对参数有自己的处理规则,你无法假设两个查询不同的URL会产生相同结果。分别记录能让阅读清单的人清楚看到区别。2