在发布个人网站或小型项目页面之前,你会遇到两个相关但不同的概念:域名和完整URL。混淆它们可能导致链接标错、书签失效或与协作者沟通不清。本文用一个假设地址逐段展示每个部分的含义,并说明如何记录这些信息。

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

假设你正在准备一个小型作品集网站,有人问你网站地址是什么。你可能回答一个域名,比如 example.org,也可能给出一串包含路径和参数的更长字符串。两种回答都有用,但它们回应的是不同的问题。域名标识的是你的内容所在的那台服务器或主机,它为原本难以记忆的纯数字IP地址提供了一个人类可读的标签。而完整URL标识的是那台服务器上的某个具体资源——一个特定页面、一张图片或一份文档——并告诉浏览器如何获取它。12

可以这样理解:域名回答的是哪栋楼,完整URL回答的是那栋楼里的哪个房间以及怎么到达。像 example.org 这样的域名告诉浏览器该联系哪台服务器。而像 https://example.org/notes/first-page 这样的URL则进一步指定了服务器上的某个具体资源。MDN的URL文档将URL描述为互联网上唯一资源的地址,是浏览器用来获取HTML页面、CSS文档和图片等已发布资源的关键机制之一。域名文档则解释说,域名是互联网基础设施的关键部分,因为它们为互联网上任何可用的服务器提供了人类可读的地址。12

对第一次建站的人来说,这个区别之所以重要,是因为你在笼统地谈论自己的网站时会用到域名,比如告诉朋友去哪里找你的作品;而在链接到站内某个具体页面、分享某篇特定文章或排查某个页面为什么能正常加载而另一个不能时,你需要用到完整URL。从一开始就把这两个概念分开理解,后面会少很多困惑。

逐段阅读示例地址

为了让这些概念变得具体,本文从头到尾使用一个假设地址字符串:https://example.org/notes/first-page?view=compact#intro。这个地址纯粹是为了拆解各组成部分而虚构的,它不指向任何真实存在的页面,也不需要任何人去注册或托管它。请把它当作一张标注了各部分名称的示意图,而不是一个可以打开的链接。

从左往右看,https 是协议方案,它指示浏览器在请求资源时应使用哪种协议。协议方案通过 :// 这个字符组合与下一部分分隔开。紧跟其后的是授权部分,在本例中就是 example.org,也就是标识服务器的域名。域名之后、问号之前的部分是路径:/notes/first-page,它告诉服务器正在请求哪个资源。问号之后是查询字符串:view=compact。问号标志着查询参数的开始,查询参数是以键值对形式提供给服务器的额外信息。最后,井号引出了片段:intro。片段就像资源内部的一个书签,引导浏览器定位到页面中的某个特定位置,而不是向服务器发送额外信息。2

有两个标点符号值得特别注意,因为它们容易混淆。问号总是引出查询部分,问号之后、井号之前的所有内容都属于查询。井号总是引出片段,井号之后的所有内容都是文档内部的本地引用,不会随请求发送到服务器。如果你在一个地址中同时看到这两个符号,问号在前,井号在后。这是URL组成方式的结构性规则,而不是建议。2

相同主机,不同路径与查询

现在保持主机部分 example.org 不变,只改变路径或查询字符串。将 https://example.org/notes/first-page?view=compact#intro 与 https://example.org/notes/second-page?view=full 对比。域名完全相同,但路径指向了不同的资源,查询携带了不同的值。第二个版本中没有片段,意味着浏览器会从页面的默认起始位置显示内容,而不是跳转到某个书签位置。尽管它们共享同一个主机,这些仍然是不同的URL。

再对比 https://example.org/notes/first-page 与 https://example.org/notes/first-page?view=compact。路径相同,但第二个版本包含了一个查询参数。服务器实际上是否会根据这个参数做出不同的处理,完全取决于服务器的配置方式。仅从字符串本身来看,你可以观察到参数存在,但无法确定服务器会用它做什么。这对初学者来说是一个重要的习惯:描述你在字符串中看到的内容,而不要假设你尚未验证的服务器行为。

最后,对比 https://example.org/notes/first-page#intro 与 https://example.org/notes/first-page。唯一的区别是片段。由于片段不会随请求发送到服务器,从服务器的角度来看,这两个地址获取的是同一个资源。片段只影响浏览器在本地如何显示内容——具体来说,就是是否滚动到标识为 intro 的元素位置。理解这个区别有助于排查为什么两个链接看起来加载了同一个页面,却显示了不同的滚动位置。2

制作地址说明卡

记录你为每个部分选择它的原因,哪怕只是简短一句。例如,你可以注明路径 /notes/first-page 反映了你的文件夹结构和规划时选定的页面标识。你可以写下查询参数 view=compact 的意图是触发一个精简布局,这是根据你的站点模板处理该参数的方式而定的。片段 intro 存在是因为你在页面顶部附近放置了一个带有该标识符的元素,希望分享出去的链接能落在那个位置。这些笔记是给你自己参考的,不需要遵循任何外部标准。

列出说明卡的各个字段时,建议按以下顺序书写:用途、完整地址、协议方案、域名、路径、查询、片段。对于我们的假设例子,卡片内容可以是:用途——笔记首页的精简视图;完整地址——https://example.org/notes/first-page?view=compact#intro;协议方案——https;域名——example.org;路径——/notes/first-page;查询——view=compact;片段——intro。把每个字段单独一行写清楚,方便日后逐项核对。

这张卡片的价值在你需要把地址告诉别人或者隔了一段时间再回来查看时会变得明显。你不必盯着一长串字符试图回忆哪部分是查询、哪部分是片段,只需看一眼卡片就能立即看清结构。它还能帮你发现错误——如果你不小心把井号放在了本该是问号的位置,卡片会在复查时让这个不匹配变得一目了然。

手工核对说明卡

检查你的说明卡是否与实际地址一致,方法是把完整URL复制到一个纯文本编辑器中,然后逐段手动标注。这种低技术手段能捕捉到那些你在思考内容而非结构时容易忽略的错误。整个过程很直接,只需要几分钟。

标注时从左边开始,确认协议方案与你记录的一致。找到 :// 分隔符并确认域名紧跟其后。然后找到域名之后的第一个正斜杠,它标志着路径的开始。定位问号并确认问号与井号之间的所有内容就是你的查询字符串。最后定位井号并确认井号之后的所有内容就是片段。在文本编辑器中把这些标签写在对应子串的旁边。

将你标注好的各段与卡片条目逐项对比。如果任何一段缺失、位置不对或拼写与你记录的不同,在使用该地址公开发布之前先修正卡片或URL。当你有多个路径相似的页面时,这一步尤其有用,因为一个放错位置的正斜杠或查询中多出的一个字符就可能产生一个看起来没问题、实际却指向意外地方的地址。

步骤 1

从说明卡上复制完整URL,粘贴到一个纯文本编辑器或空白文档中。

步骤 2

从左往右,先标出协议方案,再标出 :// 分隔符,然后标出域名。在每一段的上方或下方写一个简短标签。

步骤 3

找到域名之后的第一个正斜杠,将从该斜杠到问号之间的所有内容标注为路径;如果没有问号,则标注到字符串末尾。

步骤 4

如果存在问号,将问号与井号之间的内容标注为查询;如果存在井号,将井号之后的内容标注为片段。

保留记录供日后使用

核对完说明卡之后,把它存放在你日后确实能找到的地方——一个项目笔记文件、与协作者共享的文档,或者你站点规划文件夹中的一个专门区域。格式不重要,只要你在需要分享链接、撰写文档或排查某个页面加载异常时能快速找到它就行。

随着你的站点增长,你可能会积累多个带有不同路径和查询组合的地址。同样的卡片方法可以扩展:为你想跟踪的每个页面或每个链接变体添加一条记录。当你最终把站点交给另一个人审阅或维护时,这些卡片能给他们一个清晰的起点,而不需要他们从零开始逆向推导你的URL结构。

养成写下并核对地址的习惯是一项小投入,但每当你需要向别人解释站点结构、提交支持请求,或者只是想回忆六个月前为什么选择了某个特定路径时,它都会发挥作用。它把一串不透明的字符变成了你做出的有名称、有意图的一组选择,你可以随时回顾并在项目演进时调整。

常见问题

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

不是。域名标识的是服务器,例如 example.org;而URL标识的是该服务器上的一个具体资源,并包含协议方案、路径、查询和片段等额外部分。每个URL都包含一个域名,但单独的域名本身不是一个完整的URL。12

URL中的查询字符串和片段有什么区别?

查询字符串以问号开头,作为请求的一部分向服务器发送键值对。片段以井号开头,充当页面内部的本地书签,不会发送到服务器。在我们的例子中,view=compact 是查询,intro 是片段。2

上线之前需要理解URL的每个部分吗?

你不需要掌握每一个可选组件,但了解基本结构——协议方案、域名、路径、查询和片段——有助于你写出正确的链接、与协作者沟通,以及排查加载不符合预期的页面。本文介绍的地址说明卡方法是一种实用的方式来建立这种熟悉度,不需要深入的技术知识。