如果你正在准备第一个网站,会遇到两个密切相关的术语:域名和URL。它们在浏览器地址栏里看起来相似,但回答的是不同的问题。本文用一个假设地址来展示各部分如何组合在一起。

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

假设你正在规划一个小型个人项目,并在笔记本上写下了地址 https://example.org/notes/first-page?view=compact#intro 作为将来某个页面的占位符。这个地址纯粹是假设的,它并不指向一个当前真实存在的页面。尽管如此,它包含了你在自己的网站上线之前需要理解的所有结构要素。

域名回答的问题是:我应该联系互联网上的哪台服务器?域名为互联网上任何可用的网络服务器提供了一个人类可读的地址,因为计算机使用的数字IP地址对人们来说难以记忆,而且可能随时间变化。在我们的例子中,example.org就是域名。它告诉浏览器应该联系哪台机器,但它并不说明你想从那台机器上获取哪个具体的页面或文件。12

完整URL回答的是一个更具体的问题:我需要那台服务器上的哪一个确切资源?URL是互联网上唯一资源的地址,也是浏览器用来获取已发布资源(如HTML页面、图片或样式表)的关键机制之一。在我们的例子中,从https一直到#intro的完整字符串就是URL,域名只是其中的一个组成部分。3

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

让我们逐段拆解这个假设地址。方案(scheme)是https,它指示浏览器必须使用哪种协议来请求资源。对于网站来说,协议通常是HTTPS或其未加密版本HTTP。方案之后是授权部分(authority),由字符组合://分隔。在本例中,授权部分就是example.org,即标识目标网络服务器的域名。3

域名之后是路径:/notes/first-page。路径告诉服务器你正在请求哪个资源。接着问号引出查询字符串:?view=compact。查询参数是提供给网络服务器的额外键值对,问号标志着它们的起始。最后,井号引出片段:#intro。片段相当于资源内部的一个书签,为浏览器指明应显示该位置的内容。值得注意的是,片段标识符不会随请求发送到服务器。3

汇总本例的标注结果:https是方案,example.org是域名(主机),/notes/first-page是路径,?view=compact是由问号引出的查询字符串,#intro是由井号引出的片段。每个分隔符都有特定作用:冒号加双斜杠将方案与授权部分分开,路径中的正斜杠分隔类似目录的层级,问号标记路径与查询的边界,井号标记查询与片段的边界。3

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

现在保持主机部分example.org不变,只改变路径。对比 https://example.org/notes/first-page 与 https://example.org/notes/second-page。两个字符串的方案和域名完全相同,但路径的最后一段不同。仅从结构上就可以观察到,这两个URL指向同一台服务器上的不同资源。你无法仅凭字符串判断这些资源包含什么内容或服务器如何处理它们,地址只告诉你请求被发往哪里。

接下来,保持路径不变,只改变查询字符串。对比 https://example.org/notes/first-page?view=compact 与 https://example.org/notes/first-page?view=full。两者的路径相同,因此浏览器请求的是同一个资源位置。查询字符串不同,意味着传递了不同的附加信息。每台网络服务器对参数有自己的处理规则,了解某台服务器是否处理特定参数的唯一可靠方式是询问服务器所有者。URL字符串本身不会透露服务器将如何使用view=compact或view=full。3

这组对比说明了一个有用的原则:URL字符串的每个部分承担不同的角色,改变其中一部分并不会自动改变其他部分。域名标识服务器,路径标识资源位置,查询提供可选的附加信息。当你规划自己的网站时,可以独立地思考这些部分。你不需要理解服务器端逻辑,就能阅读和整理地址字符串本身。

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

记录一张简短的说明卡,为你项目中计划使用的每个地址建立档案。对于我们的假设示例,卡片可以这样写:用途:我的第一篇笔记页面的引言部分。完整地址:https://example.org/notes/first-page?view=compact#intro。方案:https。主机:example.org。路径:/notes/first-page。查询:view=compact。片段:intro。写下这些字段会促使你在开始搭建之前思考每个部分的作用。

说明卡有两个实际用途。第一,它为你提供一份单一的参考,在撰写内容、设置链接或向合作者解释网站结构时可以随时查阅。第二,它让不一致之处变得可见。如果你后来决定页面应该放在/notes/welcome而不是/notes/first-page,可以先更新卡片,再调整文件或配置使其匹配,而不是在网站已经上线之后才发现不一致。

你不需要任何特殊工具来完成这件事。一个纯文本文件、一行电子表格,甚至一张便利贴都可以。重要的选择是一致性:选定一种格式,并在项目中的每个地址上使用它。如果你的项目有五个页面,就做五张卡片;如果有二十个页面,就做二十张。工作量随页面数线性增长,一旦熟悉了模式,每张卡片只需要一分钟。

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

卡片写好后,通过将完整地址复制到一个空白行并手动标注每个片段来验证它。这是一个简单的校对步骤,能在拼写错误、缺少斜杠或问号位置错误造成困扰之前将它们发现。

如果任何标注与卡片不符,就修正卡片或地址字符串,直到两者一致。目标不是测试页面是否能加载,而是确认你的书面记录准确描述了你打算使用的字符串。

验证完成后,将卡片存放在项目期间你会经常查看的地方。许多人把地址说明卡和网站大纲草稿放在同一个文件里,这样两份文档能保持同步。

步骤 1

从卡片中复制完整的地址字符串,粘贴到文本编辑器或笔记本中的一个新空白行。

步骤 2

从左开始,标记方案(://之前的所有内容),然后标记主机(://与下一个斜杠或问号之间的内容),接着标记路径(从主机后的第一个斜杠到问号或井号),再标记查询(从?到#或末尾),最后标记片段(从#到末尾)。

步骤 3

将每个标注的片段与卡片上对应的字段逐一比较。如果所有字段都匹配,说明卡片是准确的。如果有任何字段不同,判断哪个版本是正确的,然后更新另一个。

保留这份说明供以后使用

写下你选择地址各部分的原因,而不仅仅是它们的内容。例如,在我们假设页面的卡片上,你可以注明:路径使用/notes/是因为所有日记条目都将放在该目录下,片段是#intro是因为页面以一个带有该标识符的标题开头。这些简短的理由说明能帮助你在几个月后原始上下文已经模糊时回忆起自己的逻辑。

当项目增长时,不要凭记忆重写卡片。打开原始卡片,阅读你记录的内容,然后进行有意识的编辑。这个习惯能防止文档与实际文件结构之间出现小的偏差。如果你重命名了一个页面或重新组织了目录,在同一次操作中更新卡片,使两者永远不会脱节。

最后,把这些卡片既当作个人参考,也当作沟通工具。如果你曾经就网站问题向他人求助,递上一份标注了各部分的清晰地址列表,比口头描述要高效得多。同一张帮助你规划结构的卡片,也能帮助合作者理解结构而无需猜测。

常见问题

在示例地址中,查询字符串和片段有什么区别?

查询字符串(?view=compact)是随请求一起发送给网络服务器的额外参数。片段(#intro)是资源内部的书签,不会发送到服务器;它只告诉浏览器在页面加载完成后应滚动或聚焦到哪个位置。3

我可以更改地址中的路径而不影响域名吗?

可以。域名(主机)和路径是URL字符串中相互独立的部分。将路径从/notes/first-page改为/notes/welcome不会改变域名example.org。不过,新路径是否实际提供某个资源取决于网络服务器的配置方式,这不是URL字符串本身能揭示的。

我需要为网站上的每一个页面都制作说明卡吗?

这是作者为保持记录一致性而给出的建议,但详细程度由你自己决定。至少为你计划从其他网站链接或公开分享的页面建立档案,因为这些地址一旦发布,后续更改时最容易破坏已有的链接。