在准备发布网站之前,你会遇到两个相关但不同的概念:域名和完整URL。理解它们各自告诉你什么信息,能帮助你更自信地阅读、书写和分享地址。本文用一个假设地址来展示各部分如何组合,以及你怎样为自己保留一份清晰的记录。

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

域名回答的是一个具体问题:你要访问互联网上的哪台服务器?域名提供了人类可读的地址,因为计算机实际使用的数字IP地址对人来说难以记忆,而且可能随时间变化。在我们的练习中,域名是example.org,它标识了主机,但没有指定你想要该主机上的哪个页面、文件或区段。1

完整URL回答的是更广泛的问题:那台服务器上的哪个具体资源,以及浏览器应当怎样请求它?URL是互联网上唯一资源的地址,是浏览器用来获取已发布资源(如HTML页面、CSS文档和图片)的关键机制之一。同一个域名可以出现在许多不同的URL中,每个URL指向不同的资源。因此,域名告诉你去哪里,完整URL告诉你到达之后要什么。2

本文余下部分将使用一个假设地址:https://example.org/notes/first-page?view=compact#intro。这个地址纯粹为了拆解其各部分而构造,不代表一个真实存在的页面,也没有服务器会响应它。请把它当作一段待阅读和标注的字符串,而不是要输入浏览器的内容。

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

本例中的方案是https,出现在://分隔符之前。方案指示浏览器请求资源时必须使用的协议。对于网站,协议通常是HTTPS或其未加密版本HTTP。在这个例子中,https告诉浏览器在联系服务器时使用安全连接。2

://分隔符之后是权限部分,在本例中就是example.org。这是域名,它指示被请求的是哪台网络服务器。这里省略了端口,因为HTTPS默认使用标准端口,浏览器不需要额外说明。权限部分中第一个正斜杠之前的所有内容都属于主机标识。2

本例中的路径是/notes/first-page,跟在域名后面,指向服务器上的一个资源。查询部分由问号引导:view=compact,它以键值对的形式向服务器提供额外参数。最后,井号引导片段:intro,片段代表资源内部的一个书签,为浏览器指示显示该位置内容的方向。值得注意的是,片段不会随请求发送到服务器。2

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

现在保持主机部分不变,只替换路径。将https://example.org/notes/first-page?view=compact#intro与https://example.org/notes/second-page?view=compact#intro对比。域名、方案、查询和片段完全相同,只有路径不同。作为字符串,这两个地址是不同的,如果有服务器在提供服务,它们会指向不同的资源。这里的观察纯粹关于文本本身:改变路径就改变了地址,即使其他部分保持不变。

接下来,保持路径不变,只改变查询。将https://example.org/notes/first-page?view=compact#intro与https://example.org/notes/first-page?view=full#intro对比。主机没有变化,路径也没有变化,唯一的区别是查询中等号后面的值。这说明查询是独立于路径的组成部分,修改查询会产生不同的URL字符串,而主机和路径部分不受影响。

你也可以完全去掉片段。地址https://example.org/notes/first-page?view=compact仍然是一个有效的URL,只是没有文档内部的书签。方案、主机、路径、查询和片段中的每一个都可以独立存在或缺省。当你在阅读或构造一个地址时,识别哪些部分存在、哪些部分缺失,有助于你理解这个地址在请求什么、又留了什么没有指定。

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

为一个假设项目,你可以创建一张简单的说明卡来记录每个地址的用途。先写目的:这个地址为什么存在?在我们的例子中,目的可以写成「以紧凑布局显示第一篇笔记的阅读视图,书签定位到引言部分」。用平实的语言写出目的,能迫使你在标注各部分之前先思考每个组成部分的贡献。

在目的说明下方,完整地写出你打算使用的地址。然后逐行列出每个组成部分:方案、主机、路径、查询和片段。对于我们的例子,你会得到五行,每行命名一个部分并展示其值。这种布局让你容易发现某个部分的遗漏或拼写错误,而不必重新阅读整串字符。

你不需要任何特殊工具来制作这张卡片。一个纯文本文件、文档中的一条笔记,甚至一张手写卡片都可以。关键是卡片放在你以后需要分享地址、嵌入其他文档或向协作者解释时能够找到的地方。在同一项目中对多个地址保持一致的格式,日后对比时会更直接。

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

检查说明卡上的完整地址,将它逐字符手工抄写到一行空白文本中,不要使用粘贴。这个缓慢的手工过程能捕捉到快速浏览会跳过的字符换位和遗漏。如果抄写的字符串与原始地址不完全一致,你就发现了一个值得在地址被使用到其他地方之前纠正的错误。

标注你抄写的字符串上每个边界,用可见的分隔符标出。在方案和://之后放一条竖线,在主机之后放一条,在路径之后放一条,在查询之后再放一条。对于我们的例子,标记后的版本读作https:// | example.org | /notes/first-page | ?view=compact | #intro。每个边界应当恰好落在说明卡上对应部分结束的位置。

逐项将说明卡与标记后的字符串核对。确认方案一致、主机一致、路径包括其开头的正斜杠一致、查询的键和值一致、片段一致。如果任何部分不同,就修正卡片或地址,然后重复标记步骤。这个复制、标记、对比的循环是一个简单的习惯,能防止小错误传播到链接、文档或共享消息中。

保留这份记录供以后使用

记录说明卡并把它和你的其他项目笔记放在一起。如果你的项目有多个地址——首页、博客区段或联系页面——为每个地址各建一张卡片,这样你查找任何一个时都不必滚动很长的列表。为文件或条目使用一致的命名规则,比如在卡片标题中包含页面名称,随着项目增长会让检索更快。

当你与协作者分享地址或在书面说明中包含地址时,回看卡片而不是凭记忆重新输入。这个习惯能减少在分享的那一刻引入拼写错误的机会。如果地址后来发生变化,在更新实际引用的同时更新卡片,使两者保持同步。

随着时间推移,这些卡片会成为你项目地址结构的轻量参考。你可以在撰写文档时、向新成员解释站点布局时、或判断一个新页面是否符合现有路径模式时使用它们。建立和维护卡片的努力很小,回报是一份清晰、可核实、由你自己掌控的记录。

常见问题

域名和URL是同一个东西吗?

不是。域名标识服务器,而完整URL标识该服务器上的一个具体资源,并包含方案、路径、查询和片段等额外组成部分。12

URL中的问号表示什么?

问号引导查询部分,它以键值对的形式向网络服务器提供额外参数。在我们的例子中,?view=compact就是查询部分。2

片段部分会随请求发送到服务器吗?

不会。片段跟在井号后面,不会随请求发送到服务器。它作为资源内部的书签,供浏览器在本地使用。2