在发布第一个网站之前,你会遇到两个相关但不同的概念:域名和完整URL。理解它们各自告诉你什么、如何组合在一起,能帮助你更有信心地阅读、书写和分享地址。本文用一个假设地址逐步拆解每个部分。

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

假设你正在筹划一个小型个人项目,想给它一个公开地址。大多数人首先想到的是域名。域名为互联网上可用的网络服务器提供一个人类可读的地址。计算机通过IP地址通信——那是一长串数字,人们很难记住——而域名通过给每台服务器一个便于记忆的标签来解决这个问题。在我们的假设示例中,域名是example.org。它回答一个具体问题:我们在谈论互联网上的哪台服务器?1

完整URL回答一个更宽泛的问题。域名标识的是服务器,而完整URL标识的是该服务器上的某个特定资源。URL是互联网上唯一资源的地址,也是浏览器用来获取已发布资源(如HTML页面、CSS文档和图片等)的关键机制之一。所以当你在浏览器中输入一个地址时,你不仅仅是在命名一台服务器——你是在指向该服务器上的某个特定页面、文件或位置。本文通篇使用的假设地址是 https://example.org/notes/first-page?view=compact#intro。这个页面并不真实存在,它纯粹是为了演示字符串各部分如何运作而构造的。2

可以这样理解:域名像是一栋建筑的名字,而完整URL像是一个包含建筑名、楼层、房间号甚至投递备注的完整邮寄地址。两者都有用,但它们回答的是不同层级的精确度问题。本文其余部分将继续使用这个单一示例,逐一检查每个组成部分。

在示例地址中标出每个部分

标注假设地址 https://example.org/notes/first-page?view=compact#intro 的每个组成部分。第一段https是方案(scheme),它告诉浏览器在请求资源时使用哪种协议。如今大多数网站的方案是HTTPS。下一段example.org是域名,即服务器的人类可读标识符。域名之后是路径,在本例中为/notes/first-page。路径指向该服务器上的一个特定位置或资源。2

路径之后,你会看到一个问号,后面跟着view=compact。问号标志着查询字符串的开始。查询参数是提供给网络服务器的额外信息,以键值对的形式排列。在我们的示例中,键是view,值是compact。最后,井号引入片段标识符:#intro。片段相当于资源内部的一个书签,告诉浏览器滚动到或聚焦于某个特定位置。值得注意的是,片段永远不会随请求发送给服务器——它完全由浏览器处理。2

总结本例的标注结果:https是方案,example.org是域名,/notes/first-page是路径,?view=compact是查询,#intro是片段。问号始终引导查询部分,井号始终引导片段。这些标点符号不是装饰性的,它们是结构性分隔符,告诉浏览器如何解析字符串的其余部分。2

同一主机下的不同路径与查询

现在保持主机部分example.org完全不变,只改变路径和查询。设想第二个地址:https://example.org/notes/second-page?view=full#summary。域名没有变化,所以浏览器仍会联系同一台服务器。变化的是路径——它现在指向不同的资源位置,以及查询——它现在为view参数传递了不同的值。片段也从intro变成了summary,意味着浏览器会在获取到的资源中寻找不同的书签位置。

再看第三种变体:https://example.org/notes/first-page。这里路径与原始示例相同,但查询和片段完全缺失。这说明查询和片段是URL的可选部分,没有它们地址仍然有效。这个版本与原始版本的区别纯粹在于字符串本身——一个携带了给服务器和浏览器的额外指令,另一个没有。我们只是在观察字符串说了什么,并没有对任何特定服务器实际会如何处理这些指令做出断言。

这个比较为初学者突出了一个重要观点:即使域名保持不变,改变路径、查询或片段也会产生不同的URL。每个变体都是一个独立的地址。当你规划自己的站点结构时,认识到域名只是起点会很有帮助。你选择的路径决定了各个页面和资源如何被定位,查询参数可以进一步细化服务器接收到的信息。这些都不需要你预测服务器行为,你只是在阅读地址字符串并理解每个片段所传达的信息。

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

记录一张简短的说明卡,用于你打算使用或分享的每个地址。对于我们的假设项目,说明卡可能是这样的:用途——一个以紧凑布局显示的个人笔记页面,浏览器滚动到简介部分。完整地址——https://example.org/notes/first-page?view=compact#intro。方案——https。域名——example.org。路径——/notes/first-page。查询——view=compact。片段——intro。将这些分别写出来会迫使你确认每个组成部分,也更容易在之后发现错误。

用没有技术背景的人也能理解的平实语言写出用途。用途不是技术规格说明,而是你自己对这个地址为什么存在、你期望它指向什么的提醒。如果之后你修改了路径或删除了查询,你可以更新说明卡并立即看到变化。当你管理多个页面时,这种做法尤其有用,因为每个页面都有自己的说明卡和笔记中的独立一行。

检查说明卡上的每个字段是否与实际字符串逐字符匹配。常见错误包括混淆正斜杠与反斜杠、在查询前遗漏问号、或将片段放在查询之前。说明卡格式使这些错误可见,因为每个部分都占据自己的标注行。你不需要任何特殊软件——一个纯文本文件或笔记本就完全够用。

手工核对你的说明卡

手工核对是一种简单但可靠的方式,用来确认你的说明卡与你打算使用的地址一致。这个过程不需要任何工具,只需要你的眼睛和一个文本编辑器。以下是我们建议在公开分享地址或将其嵌入其他文档之前养成的实用习惯。

这些步骤是基于常见编辑实践的作者建议。它们并非任何规范所规定,但能帮助你在快速阅读长字符串时捕捉容易忽略的拼写错误和结构错误。

每次在项目笔记中添加新页面地址时都使用这个清单。随着时间推移,这个习惯会变得很快,你会发现大多数错误都是简单的字符顺序颠倒或缺少标点符号,仔细逐行检查就能立即发现。

步骤 1

从浏览器地址栏或规划文档中将完整地址复制到文本编辑器的空白行中。不要凭记忆重新输入,始终粘贴或复制你想要核对的确切字符串。

步骤 2

从左侧开始,识别方案并确认它与说明卡上的方案字段一致。移到域名部分逐字符比较。然后找到域名后的第一个正斜杠,确认该斜杠与问号之间(如果没有查询则到字符串末尾)的所有内容与说明卡上的路径字段一致。

步骤 3

如果存在问号,验证问号与井号之间(或到字符串末尾)的文本与你的查询字段一致。如果存在井号,验证其后的所有内容是否与你的片段字段一致。将每个字段标记为已确认,或标出任何差异以便更正。

保留记录供以后使用

说明卡核对完毕后,将它存放在你确实会回顾的地方。项目笔记中的一个专用部分、一个电子表格标签页、甚至团队聊天中的一条置顶消息都可以。格式不如习惯重要——关键是把说明卡与它所描述的内容放在一起。当你之后撰写文档、与合作者分享链接或排查失效引用时,说明卡能让你免于从头重新解析地址。

你可以选择只记录与当前任务相关的部分。对于一个简单的个人博客,你可能只记录每个页面的域名和路径,如果查询和片段尚未使用就跳过它们。对于一个依赖查询参数来控制显示选项的项目,记录这些就变得必要。关键在于一致性:无论你选择哪种详细程度,在所有说明卡上以相同方式应用,使整套记录保持易于浏览。

这份记录同时也是沟通辅助工具。如果你需要向他人解释你的站点结构——也许是一位设计师、一位帮忙做内容的朋友、或者未来的你自己——说明卡为你提供了现成的参考。你可以指向用途字段来解释意图,指向标注好的各部分来解释机制,无需每次重新推导拆解过程。在项目的整个生命周期中,这一小小的文档投入会反复带来回报。

常见问题

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

不是。域名标识的是服务器,而完整URL标识的是该服务器上的特定资源。URL包含域名加上方案、路径、查询和片段等额外部分。12

每次写地址都需要包含查询和片段吗?

不需要。查询和片段是URL的可选部分。如果你的页面不使用查询参数或页内锚点,地址没有它们也完全有效。只在项目确实需要时才加入它们。2

可以只改路径而不改域名吗?

可以。无论你在其下使用多少不同的路径,域名都保持不变。路径、查询和片段的每个独特组合都会产生不同的URL,但它们可以共享同一个域名。