第一次准备个人网站时,浏览器地址栏里那一长串字符看起来像一整块文字,实际上它由几个功能不同的部分组成。本文用一个假设地址逐段拆解,帮你弄清楚每一段回答什么问题,以及如何为自己保留一份实用的地址记录。

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

假设你正在规划一个小型个人项目,在便签上写下了一个地址:https://example.org/notes/first-page?view=compact#intro。这个字符串完全是假设的,不指向任何真实页面,它存在的目的只是让我们标注各部分。面对这样一整串字符,你可能会好奇它到底携带了哪些信息,以及在上线之前需要理解到什么程度。

域名回答的是一个具体问题:浏览器应该联系哪台服务器?域名是互联网基础设施的关键组成部分,因为它们为互联网上任何可用的网络服务器提供了人类可读的地址。计算机之间通过IP地址通信,而IP地址对人类来说难以记忆且可能随时间变化,域名正是为了解决这个可读性问题而存在的。12

完整URL回答的是一个更宽泛的问题:在那台服务器上,应该获取哪个具体资源?URL是互联网上唯一资源的地址,也是浏览器用来检索已发布资源(如HTML页面、CSS文档和图片)的关键机制之一。换句话说,域名只是更大URL字符串中的一个组成部分,其余部分将请求进一步限定到特定页面、文件或页面内的某个位置。3

在本例中标出各组成部分

回到我们的假设字符串,逐段标记每个组成部分。方案部分是https,它告诉浏览器请求资源时应使用哪种协议。权限部分紧跟在://模式之后,包含域名example.org,用于标识被请求的网络服务器。权限部分之后是路径/notes/first-page,它指向该服务器上的一个位置。3

问号引导URL的查询部分。在我们的例子中,view=compact是一个键值对,为网络服务器提供额外参数。井号引导片段,也称为锚点。这里intro是片段标识符,它给浏览器指示,让其显示资源内部某个已标记位置的内容。片段不会随请求发送到服务器,它只影响浏览器在资源加载后显示的内容。3

注意域名example.org本身也有内部结构。最后一个点之后的部分org是顶级域名,它是分层命名体系中最通用的域。标签example位于顶级域名的左侧,有时被称为二级域名。它们合在一起构成一个完全限定域名,在前面加上方案https://就使整个组合成为一个完整的URL。41

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

将方案和主机固定为https://example.org,只改变路径。如果把/notes/first-page替换为/notes/second-page,你会得到一个不同的URL字符串,尽管被联系的服务器完全相同。路径部分正是区分同一主机上不同资源位置的要素。你可以把它想象成街道名称不变,只更换了门牌号。

现在固定路径,只改变查询字符串。将view=compact替换为view=full,会产生又一个不同的URL字符串,但路径仍然指向同一个资源位置。查询参数是提供给网络服务器的额外信息,每台服务器对参数的处理有自己的规则。如果不询问服务器所有者,仅凭字符串本身无法判断某个参数是否会改变返回的内容,还是会被完全忽略。3

最后考虑去掉片段的情况。https://example.org/notes/first-page?view=compact 去掉#intro之后,仍然向服务器请求相同的资源,因为片段不会随请求发送。片段只告诉浏览器在页面加载后滚动或聚焦到哪里。这个观察在你比较两个地址、判断它们是指向同一个底层资源还是仅仅指向资源内不同位置时很有用。3

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

记录一张简短的卡片,为你项目中计划使用的每个地址保留说明。对于我们的假设例子,卡片可以包含四行内容:地址的用途、完整的URL字符串、各部分的标注列表,以及你预期将来可能修改哪些部分的备注。把所有信息集中在一张卡片上,意味着你在设计讨论或撰写文档时可以一眼查看,而不必凭记忆重新解析字符串。

在用途一行中,用平实的语言描述这个地址打算做什么。在我们的例子里,你可以写类似

将标注后的各部分与完整字符串分开记录,这样你可以更新其中一部分而不会意外改动另一部分。例如,如果你后来决定把路径从/notes/first-page改名为/journal/first-entry,你可以立即看到只有路径那一行发生了变化,而方案、主机、查询和片段保持不变。这种分离减少了在你不打算修改的部分引入拼写错误的机会。

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

说明卡写好之后,一次快速的手工核对可以帮助你在把地址分享给别人之前发现抄写错误。以下过程是普通作者建议,而非任何规范的要求,请根据自己笔记的格式灵活调整。

检查分隔各部分的标点符号。确认冒号和双斜杠出现在方案与主机之间,正斜杠开头表示路径,问号引导查询,井号引导片段。分隔符放错位置或遗漏是手写笔记中地址出错最常见的原因之一。

记录你在制作卡片时做出的所有假设。如果你假设查询参数view=compact会被未来的服务器处理,就把这个假设明确写下来,以便网站上线后记得去验证。把尚不确定的事情写下来,和把已确定的事情写下来同样有用。

步骤 1

将完整URL字符串从说明卡复制到纯文本编辑器中。逐字符与原文对照,确认没有多余的空格、额外的斜杠或遗漏的符号在转录过程中混入。

步骤 2

在文本编辑器中直接标注各段,方法是在每个分隔符前插入换行。最终你应该得到分别对应方案、主机、路径、查询和片段的独立行。逐行阅读并确认它们与说明卡上对应的条目一致。

步骤 3

用一句话概括这个地址应当完成的任务,然后将该概括与卡片上的用途行进行比较。如果两处描述不一致,判断哪一个反映了你当前的意图,并更新另一个。

保留记录供日后写作与沟通使用

把说明卡保留在你已经用于项目笔记的任何格式中,无论是markdown文件、电子表格的一行,还是实体索引卡。格式本身不如一致性重要,目标是有一个固定位置,当你需要向协作者解释地址、在文档中嵌入它,或者排查链接行为异常时可以随时查阅。

随着项目增长,你可能会积累多个地址,分别对应不同页面、视图或锚点位置。每一个都值得拥有自己的卡片。如果你后来重命名了路径或添加了新的查询参数,同时更新卡片可以让你的参考信息保持准确,避免几个月后当最初的推理已经从记忆中淡去时再重新构建逻辑。

标注各部分的习惯在你阅读别人的URL时同样有回报。因为你已经在自己的例子中练习过识别方案、主机、路径、查询和片段,所以可以把同样的标签应用到遇到的任何地址上。这使你在论坛或问题报告中更容易提出精确的问题,因为你能指出字符串的哪一部分你认为导致了问题,而不是粘贴整个URL然后希望别人自己弄清楚。

常见问题

片段部分会被发送到服务器吗?

不会。片段标识符出现在井号之后,它不会随请求发送到服务器。它只指示浏览器在已加载的资源内部滚动或聚焦到特定位置。3

只改查询字符串而不改路径,请求的还是同一个页面吗?

查询字符串与路径是分开的,改变查询会产生不同的URL字符串,但路径仍然指向同一个资源位置。不过服务器是否真的返回不同内容取决于它如何处理参数,这需要向服务器所有者确认。3

上线一个简单的网站之前,需要理解所有URL规则吗?

不需要。URL标准包含一些对普通用户或构建功能网站的开发者来说无关紧要的额外部分和规则。了解方案、主机、路径、查询和片段对于大多数个人和小型项目工作已经足够。3