如果你正在第一次准备个人网站或小型项目网站,“域名”和“URL”这两个词很容易混淆。本文用一条假设地址来拆解它们各自的含义、完整URL中各部分的区别,以及如何用一张简短的说明卡帮你记住自己的地址。
域名与完整URL分别回答什么问题
假设我们有一条仅用于拆解字符串的练习地址:https://example.org/notes/first-page?view=compact#intro。这个页面不需要在互联网上真实存在,我们只是用它来练习识别网址的各个部分。这个字符串里包含一个域名,而域名又嵌套在一条更长的URL中,理解这两层的关系是读懂任何地址的第一步。
域名回答的问题是“我要联系互联网上的哪台服务器”。域名为互联网上任何可用的网络服务器提供了人类可读的地址,因为计算机实际使用的数字IP地址既难以记忆又可能随时间变化。在我们的例子中,example.org就是域名,它告诉浏览器该联系哪台服务器,但并不指定该服务器上的某个具体页面或文件。1
完整URL回答的是一个更具体的问题:“我要的是那台服务器上的哪一个资源?”URL是互联网上某个唯一资源的地址,也是浏览器用来获取已发布资源的关键机制之一,这些资源包括HTML页面、图片、样式表等。在我们的例子中,从https到#intro的整条字符串就是URL,它包含域名,但还添加了若干部分,将请求缩小到一个特定资源,甚至精确到该资源内的某个位置。2
在本例中标出每个组成部分
让我们逐段拆解这条假设字符串。片段https是方案,它指示浏览器请求资源时必须使用的协议。对于网站来说,协议通常是HTTPS或其未加密版本HTTP。字符组合://将方案与URL的下一部分——权限——分隔开来。2
本例中的权限部分是example.org,也就是域名,它指示被请求的是哪台网络服务器。权限之后是路径,本例中为/notes/first-page。路径指向网络服务器上的一个资源。在早期网络中,这样的路径代表服务器上的物理文件位置,如今它大多是网络服务器处理的一种抽象。我们可以把路径读作由斜杠分隔的一系列片段:notes是一个片段,first-page是下一个。2
路径之后,问号引导查询字符串。本例中的查询是view=compact,它是一个键值对。参数是提供给网络服务器的额外信息,当存在多个键值对时用和号分隔。最后,井号引导片段标识符,本例中为intro。锚点相当于资源内部的一个书签,告诉浏览器显示位于该书签位置的内容。值得注意的是,片段标识符不会随请求发送给服务器。2
同一主机,不同路径与查询
现在保持本例的主机部分不变,只改变路径。如果把/notes/first-page换成/notes/second-page,域名和方案完全相同,但字符串指向的是同一台服务器上不同的资源位置。路径就是区分同一站点内不同页面的部分。我们并不声称这两个页面真实存在,只是在观察字符串如何变化。
接下来,保持路径不变,把查询字符串从view=compact改为view=full。域名、方案、路径和片段在字符串中都保持不变,只有等号后面的值不同。这说明查询字符串是独立于路径的另一层信息。URL的每个部分在字符串中占据自己的位置,并由各自的分隔符引导:问号开启查询,井号开启片段。2
你也可以完全去掉片段,地址仍然指向服务器上的同一个资源,因为片段标识符不会随请求发送给服务器。去掉它只会改变浏览器加载资源后在文档中滚动到的位置。这个观察有助于澄清一个常见困惑:片段影响的是读者看到的页面位置,而不是获取哪个页面。字符串的每个部分承担不同的角色,认清这些角色能帮助你排查问题或向他人描述地址。2
为假设项目制作一张地址说明卡
为你的项目将要使用的每个地址写一张简短的说明卡。对于我们的假设例子,卡片可以包含四行内容:页面的用途、完整的URL字符串、从中提取的域名,以及对路径和查询预期含义的简要说明。这是一种个人整理习惯,不是技术要求,但它给你一个统一的查看位置,方便分享或核对地址。
在用途一栏,用日常语言描述访问者在该地址应该看到什么。对于本例,你可以写“笔记第一页的精简阅读视图,滚动到引言部分”。这个描述是你自己对字符串各部分含义的解读,它不来自服务器,也不保证实际显示的内容。目的是在技术字符串旁边给自己一个人类可读的摘要。
记录完整URL时按你打算使用的原样写入,包括方案,然后在下方逐项列出各部分:方案是https,主机是example.org,路径是/notes/first-page,查询是view=compact,片段是intro。把每个部分单独放一行,之后如果你把地址复制到邮件链接或文档引用等不同场景,就能更容易发现拼写错误或遗漏的分隔符。
用手工复制与逐项标记核对说明卡
检查你的说明卡时,把完整URL复制到一个纯文本编辑器中,在每个分隔符处手动插入空格或换行。在://之后、路径第一个/之前、?之前和#之前各放一个断点。这样你就得到了一个与卡片上标注行对应的可视化堆叠。如果某个片段与你的记录不一致,你就发现了一个值得在地址投入使用前修正的差异。
将卡片上的主机片段与你计划为项目使用的域名进行对照。一个常见的早期错误是混淆带www和不带www的版本,或者不小心把末尾的斜杠当作域名的一部分,而它实际上属于路径。在我们的例子中,主机是example.org,没有www前缀,也没有末尾斜杠;第一个斜杠属于路径。在卡片上注明这个区别,能防止你之后配置链接或与协作者分享地址时产生混淆。
列出你的项目将要使用的其他地址,比如联系页面或图片素材,对每一条重复同样的标注练习。每张卡片都遵循相同的格式:用途、完整字符串、然后逐项标注各部分。随着时间推移,你会积累一份小的参考清单,查阅时不必凭记忆重新推导结构。花的时间很少,但能减少把残缺或错误地址粘贴到网站内容中的概率。
保留这份记录供以后使用
标注你的地址卡片时,选择你已经在用的项目笔记格式来存放:纯文本文件、电子表格或维基页面都可以。格式本身不如一致性重要。选定一个位置,每当你添加、重命名或删除页面时就更新它。如果以后你把项目交给协作者,这些卡片能让他们快速了解情况,而不必从网站导航中反向推导每条URL的结构。
当你撰写文档、在消息中分享链接或在模板里嵌入地址时,从卡片上复制而不是凭记忆重新输入。这是一个简单的习惯,但能捕捉到快速打字时看不见的错误,比如漏掉问号导致查询字符串变成了路径的一部分,或者把井号放在了问号前面而不是后面。卡片充当字符串本身的唯一可靠来源。
你不需要记录网站可能产生的每一条URL。把注意力放在你主动引用的地址上:从其他网站链接过来的页面、你嵌入的素材,以及任何公开分享的地址。对于我们的假设项目,笔记页面的这一张卡片就足以演示这个方法。随着网站增长,只在某条地址重要到出错后排查会耗费大量时间时才添加新卡片。
常见问题
域名和URL是同一个东西吗?
不是。域名标识要联系哪台服务器,而URL是完整的地址,还包含方案、路径以及可选的查询字符串和片段。域名是URL内部的一个组成部分。12
井号后面的片段会发送给服务器吗?
不会。片段标识符,也就是井号后面的部分,不会随请求发送给服务器。它只是告诉浏览器在已加载的文档中滚动到哪个位置。2
在说明卡上写地址时需要包含方案吗?
包含方案是一个好习惯,因为它让字符串完整且没有歧义。在浏览器地址栏中通常可以省略方案,但在文档或共享笔记中写完整形式能避免与其他协议混淆。