第一次准备网站时,域名和URL这两个词会反复出现。它们看起来相似,实际回答的是关于地址的不同问题。本文用一个假设字符串展示每个部分的含义,并演示如何在上线前把地址记录清楚。12
域名与完整URL分别回答什么问题
假设你正在搭建一个小型个人项目,有人问你的网站地址是什么。你可能回答 example.org,这就是一个域名。域名是互联网基础设施的关键组成部分,它为互联网上任何可用的网络服务器提供一个人类可读的地址。计算机通过IP地址定位服务器,但人们很难记住那些数字序列,而且IP地址可能随时间变化。域名正是为了解决这个问题而存在的,它给你一个可读的标签来标识想要访问的服务器。1
现在假设同一个人问你应该先读你网站上的哪个页面。这时你需要的信息比域名更具体。URL(统一资源定位符)是互联网上某个唯一资源的地址,它是浏览器用来获取已发布资源(如HTML页面、图片和文档)的关键机制之一。一个完整的URL不仅告诉浏览器该联系哪台服务器,还告诉它该从该服务器上获取哪个具体资源。2
因此,域名回答的问题是「哪台服务器」,而完整URL回答的是「该服务器上的哪个具体资源」。对于我们的假设项目,example.org 是域名,https://example.org/notes/first-page?view=compact#intro 是一个指向特定资源的完整URL。这个地址纯粹用于拆解字符串的说明,并不声称该页面真实存在或已上线。12
在本例中标出地址的各个组成部分
把完整地址写在一行空白处以便逐段观察:https://example.org/notes/first-page?view=compact#intro。第一部分 https 是方案(scheme),它指示浏览器请求资源时必须使用的协议。对于网站,协议通常是HTTPS或其未加密版本HTTP。方案与地址其余部分之间由 :// 这一字符组合分隔。2
下一部分 example.org 是权限区域中的域名。域名由若干个以句点分隔的部分组成,从右向左阅读。最右边的 org 是顶级域名(TLD),它向用户传达该域名背后服务的一般用途。它左边的 example 是二级域名。两者合在一起构成主机名,标识被请求的是哪台网络服务器。13
域名之后是路径:/notes/first-page,表示资源在网络服务器上的位置。路径之后,问号引出查询字符串:view=compact。参数是提供给网络服务器的额外键值对,问号始终标示查询部分的起点。最后,井号引出片段:intro。锚点相当于资源内部的一个书签,为浏览器指示应显示该书签位置的内容。井号之后的部分不会随请求发送到服务器。2
保持主机不变,对比不同路径与查询
保持本例的主机部分不变,观察改变其他组成部分时会发生什么。如果把路径从 /notes/first-page 改为 /notes/second-page,你指向的就是同一台服务器上的不同资源。域名和方案完全相同,但浏览器会请求不同的位置。这种差异仅通过阅读字符串就能观察到,不需要对服务器的实际行为做任何推断。
同样,如果把查询从 view=compact 改为 view=full,路径保持不变但额外参数不同。问号始终标示路径与查询部分之间的边界。当存在多个参数时,各键值对之间用和号分隔;本例只有一个键值对,因此没有出现和号。把片段从 intro 改为 summary 也一样,路径和查询不受影响,只是浏览器会定位到同一资源内另一个书签位置。
完全去掉片段也会改变字符串。没有井号和 intro 这个词时,浏览器不会尝试滚动到资源内的任何特定位置。所有这些变体共享同一个域名,意味着它们都指向同一台服务器,区别完全在于主机之后的部分。注意这些差异有助于你在与协作者沟通或为项目编写文档时精确描述地址。
为假设项目制作一张地址说明卡
记录你的假设项目的目的,用一句简短的话概括。例如可以写:「这个页面收集我的阅读笔记并以紧凑布局展示。」保持目的陈述简短,方便日后检查你选择的地址是否仍然匹配页面的实际功能。如果项目增长、页面角色发生变化,你可以更新目的行并与地址结构做对比。
接下来,完整写下你打算使用的地址:https://example.org/notes/first-page?view=compact#intro。在这一行下方,列出每个组成部分及其简短标签。方案:https。域名:example.org。路径:/notes/first-page。查询:view=compact。片段:intro。这份清单就是你的地址说明卡,可以分享给协作者、粘贴到项目文件中,或保存在笔记文档里作为单一参考。
你还可以补充一条简短备注,说明哪些部分预计保持稳定、哪些可能随项目演进而变化。例如,域名一旦选定通常会固定不变,但路径和查询参数可能随着页面增加或显示选项调整而改变。现在写下这些预期,几周后重新查看说明卡时就能避免混淆。
手工复制与逐项标记来核对说明卡
手工核对是一个简单的习惯,能在拼写错误和标签错位造成困扰之前发现它们。整个过程只需要一个文本编辑器和几分钟注意力,可以把它当作分享地址或将其嵌入其他文档之前的最终检查。
完成以下步骤后,将你标记过的副本与原始说明卡逐项对比。如果每个片段在拼写、标点和顺序上都一致,说明卡就是一致的。如果有任何不同,修正说明卡并重复一次这个过程。这个循环只需一分钟,却能防止导致链接失效或读者被引向错误页面的小错误。
检查片段部分时,确认井号出现在问号及其值之后。在本例中,intro 位于井号之后,也位于查询 view=compact 之后。如果不小心把片段放在查询之前,字符串的含义就会改变。这是手工复制地址时常见的错误,因此专门检查问号和井号的顺序是值得的。
步骤 1
从说明卡中复制完整地址,粘贴到文本编辑器的一行空白处。不要凭记忆重新输入;使用直接复制,避免在这个阶段引入新错误。
步骤 2
从左边开始,标注每个边界。在 https:// 之后、example.org 之后、问号之前和井号之前各放一个空格或斜线标记。这样你就有了五个可见的片段。
步骤 3
按顺序为每个片段标注名称:方案、域名、路径、查询、片段。把标签直接写在对应文本的上方或下方,使映射关系一目了然。
步骤 4
将你标注过的行与说明卡原始条目逐字符对比。特别注意问号和井号的位置,因为交换它们的顺序会改变字符串的含义。
保留这份说明供以后使用
把完成的说明卡存放在项目恢复时你自然会找到的地方。项目文件夹中的一个纯文本文件就很合适,因为它会随其余材料一起保存。你也可以把它粘贴到维基页面、共享文档或团队已经在用的笔记工具中。格式本身不如保持它与所描述项目放在一起这一习惯重要。
之后当你撰写引用该页面的内容时——比如一篇博客文章、一封给协作者的邮件或另一个网站中的链接——你可以回到说明卡复制精确地址,而不必凭记忆重新拼写。这减少了遗漏查询参数或拼错路径片段的可能性。说明卡还能帮助你向不熟悉URL结构的人解释地址,因为逐部分的标注已经写好了。
随着时间推移,你可能决定简化地址、去掉查询字符串或重新组织路径。发生时,先更新说明卡,再把变更传播到旧地址出现过的每一个地方。因为说明卡分别列出了每个组成部分,你可以快速看出哪些部分变了、哪些没变,使更新过程比只持有一个没有注释的裸URL时更加直接。
常见问题
域名和URL是同一个东西吗?
不是。域名标识服务器,而URL是该服务器上某个具体资源的完整地址。URL包含方案、域名、路径,以及可选的查询和片段。域名只是完整URL中的一个组成部分。12
为什么井号后面的片段部分不会到达服务器?
片段标识符供浏览器在已加载的资源内部定位某个位置。因为它只影响浏览器接收到资源之后的显示行为,所以不会包含在发送给服务器的请求中。2
分享地址给别人时必须写上方案吗?
大多数情况下,如果在浏览器地址栏中省略方案,浏览器会默认使用HTTP或HTTPS,因此日常交流中只分享域名和路径通常就够了。但在代码、文档或说明卡中嵌入地址时,写完整方案可以避免歧义并使记录完整。2