网站上线之前,地址本身需要先对建站者说得通。本文用一个假设的URL展示域名与完整地址的区别,说明字符串中各部分分别承担什么角色,以及一份简单的书面记录如何避免后续的混乱。

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

假设你正在准备一个小型个人项目站点,并写下 https://example.org/notes/first-page?view=compact#intro 作为规划用的占位地址。这个地址并不指向一个真实存在的页面,它存在的唯一目的是让我们逐段审视字符串的结构。即便只是假设示例,它已经包含了一个典型网站地址中所有主要的组成部分,因此适合在你操作自己的域名之前先学习结构。

域名回答的问题是「我应该找到互联网上的哪台服务器」。域名是互联网基础设施的关键部分,它为互联网上任何可用的Web服务器提供一个人类可读的地址,因为IP地址难以记忆并且可能随时间变化。在我们的例子中,example.org就是域名,它标识了主机,但没有指定该主机上的任何具体文件或页面。1

完整URL回答的是一个更具体的问题:「在那台服务器上,我要的是哪一个唯一资源」。URL是互联网上唯一资源的地址,也是浏览器用来获取已发布资源(如HTML页面、CSS文档和图片)的关键机制之一。完整的字符串 https://example.org/notes/first-page?view=compact#intro 将范围从整台服务器缩小到一个特定资源,并附带了关于如何展示该资源的额外指令。2

在本例中标出各部分

写出示例字符串并逐段标注其作用。方案是https,它告诉浏览器请求资源时应使用哪种协议。主机是example.org,即标识服务器的域名。路径是/notes/first-page,指向该服务器上的一个具体位置。查询字符串是view=compact,由问号引导。片段是intro,由井号引导。这些部分各由不同的分隔符隔开,合在一起构成完整地址。2

问号是一个信号,表示其后的所有内容都是提供给Web服务器的参数。这些参数是键值对,服务器可以利用它们在返回资源之前做额外处理。井号标记片段标识符的起始位置。锚点相当于资源内部的一个书签,为浏览器指明应显示该书签处的内容。值得注意的是,井号之后的部分不会随请求发送给服务器。2

注意方案、主机和路径由结构性字符分隔(冒号加双斜杠的模式,然后是正斜杠),而查询和片段则由各自独特的标记符分隔。这意味着你总是可以通过寻找这些分隔符来判断一个部分在哪里结束、下一个部分从哪里开始。对初学者来说,在任何地址字符串中找到问号和井号,是理解该地址在请求什么内容的一个可靠的第一步。

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

保持主机example.org不变,只改变路径。将 https://example.org/notes/first-page?view=compact#intro 与 https://example.org/gallery/photos?sort=date 对比。两个地址中的域名完全相同,意味着浏览器会联系同一台服务器。不同的是路径,它指向该服务器上不同的资源。查询字符串也发生了变化,第二个地址中没有片段。这说明域名本身并不决定你看到什么内容,路径和其他部分进一步细化了请求。

现在保持主机和路径都不变,只改变查询字符串。将view=compact与view=full对比。两种情况下服务器收到的路径相同,但得到的参数值不同。我们并不推断任何特定服务器会如何处理这些值,要点仅在于字符串本身携带了不同的指令。片段也可以从intro变为summary,这会让浏览器在同一资源内滚动到不同的书签位置,而不会改变服务器收到的内容。

这些对比揭示出,URL不是一个不可分割的标签,而是一个结构化字符串,其中每个片段承担不同的角色。改变路径就改变了请求的资源。改变查询就改变了随请求一起发送的参数。改变片段就改变了浏览器在返回的资源中滚动到的位置。理解这些边界有助于你阅读任何陌生的地址,并判断哪个部分负责哪种行为,而不需要了解服务器的内部逻辑。

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

记录一张简短的说明卡,对应你的假设项目地址。说明卡应包含三项内容:用通俗语言写明页面目的、你打算使用的完整地址字符串、以及各部分的标注分解。对于我们的例子,目的可以写成「笔记区第一篇笔记的紧凑阅读视图」。完整地址是 https://example.org/notes/first-page?view=compact#intro。分解列出方案为https、主机为example.org、路径为/notes/first-page、查询为view=compact、片段为intro。

写下这张卡片会迫使你在动手搭建之前决定每个部分的用途。如果你无法用一个短语描述查询参数的目的,这可能是一个信号,说明你暂时还不需要它。如果片段名称与你计划创建的内容区块不对应,你可以现在就从计划中移除它,而不是等到后来才发现不匹配。说明卡是一种规划工具,不是技术要求。

你可以把这张卡片保存在纯文本文件中、项目文件夹里的笔记中,甚至第一个HTML文件顶部的注释里。格式不重要,只要你能再次找到它就行。重要的是完整地址及其标注部分集中在同一个地方,这样当你中断一段时间后重新回到项目时,可以快速提醒自己每个片段原本的含义。

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

检查说明卡与实际字符串是否一致,方法是将地址逐字复制到另一行。这个手工复制步骤能捕捉快速阅读时容易遗漏的拼写错误,例如缺少斜杠、字母颠倒或多出的空格。复制完成后,从左到右逐段查看字符串,在每个片段上方标注其角色:方案、主机、路径、查询、片段。如果任何片段与说明卡上的记录不一致,就修正卡片或地址,直到两者吻合。

使用不同颜色的笔或文本高亮(如果你在纸上工作或使用支持高亮的编辑器)。着重标出问号和井号,因为这两个分隔符最容易被初学者忽略。当每个片段都已标注并与说明卡匹配时,你就有了一份经过验证的参考,可以在编写链接、配置重定向或向合作者解释地址时放心使用。

每次修改地址后都重复这一验证过程。即使是很小的编辑,比如重命名路径中的一个片段或添加一个新的查询参数,也可能在说明卡与实际字符串之间引入不匹配。每次变更后重新检查只需片刻,却能防止那种在数周未跟踪的编辑中逐渐积累的混乱。

步骤 1

将说明卡上的完整地址逐字复制到一行空白处,完成之前不要回头看原文。

步骤 2

将你的副本与原文对比,圈出所有差异,修正后再继续。

步骤 3

在修正后的副本上为每个片段标注角色:方案、主机、路径、查询、片段。

步骤 4

确认每个标注都与说明卡上的对应条目一致,更新有误的一方。

保留这份记录供以后使用

将经过验证的说明卡存放在你恢复项目工作时自然会查看的位置。对很多人来说,这是项目文件夹根目录下的README文件,或者一份与站点文件放在一起的专用笔记文档。目标不是某种特定格式,而是一个可靠的位置。当你或合作者下次打开项目时,说明卡应该是与代码并列最先看到的东西。

随着项目增长,你可能会添加更多页面,因此也会有更多地址。每个新地址可以在同一张卡片上占一行,遵循相同的分解模式。随着时间推移,这张卡片会成为你站点结构的一张小地图,显示哪些路径存在、它们接受什么查询、以及你定义了哪些片段。当你编写导航链接、设置重定向或向他人解释站点布局时,这张地图很有用。

你不需要遵循任何外部标准来决定说明卡的详细程度。有些人只记录完整地址和一行目的说明。另一些人会补充为什么选择了某个查询参数,或者片段指向什么内容。选择对你个人有帮助的详细程度即可。重要的是记录存在、它与你实际使用的字符串一致、并且在字符串发生变化时你会更新它。

常见问题

URL中井号后面的片段会发送给服务器吗?

不会。片段标识符即井号之后的部分,不会随请求发送给服务器。它仅由浏览器使用,用于在已获取的资源中滚动到特定位置。2

仅凭域名能知道我会看到哪个页面吗?

不能。域名标识的是服务器,而不是服务器上的具体资源。你需要完整的URL,包括路径和查询参数,才能指定你请求的是哪个页面或文件。12

在浏览器地址栏输入URL时必须写方案吗?

不一定。当你在地址栏中省略方案时,浏览器通常会默认使用HTTP或HTTPS。但在HTML中编写URL或在文档中分享地址时,包含方案能使地址含义明确无歧义。2