当你第一次准备建站时,会遇到两个相关但不同的概念:域名和URL。理解它们各自的作用,能帮助你在项目上线前自信地阅读、书写和整理网站地址。

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

假设你正在规划一个小型个人项目,并为其中一个页面草拟了地址:https://example.org/notes/first-page?view=compact#intro。这个地址完全是假设的,仅用于拆解字符串练习,不指向任何真实页面,也不会有服务器响应它。写下它的目的是练习识别每个片段所传达的信息。

域名回答的问题是「我在和哪台服务器通信」。域名互联网上任何可用网络服务器提供一个人类可读的地址,因为IP地址难以记忆且可能随时间变化。在我们的例子中,example.org就是域名,它在所有联网设备中标识了一台特定的服务器。12

完整URL回答一个更广泛的问题:「我要那台服务器上的哪个具体资源」。URL是互联网上唯一资源的地址,也是浏览器用来获取HTML页面、CSS文档和图片等已发布资源的关键机制之一。域名只是URL中的一个组成部分,协议方案、路径、查询参数和片段共同将请求缩小到一个特定位置,有时甚至是该位置中的某个具体锚点。34

在本例中逐段标出各组成部分

URL的第一部分是协议方案,它指示浏览器请求资源时必须使用的协议。在我们的例子中,https是协议方案,告诉浏览器使用安全版本的HTTP协议与服务器通信。紧随其后的字符 :// 将协议方案与地址的下一部分分隔开。3

协议方案之后是权限部分,在我们的例子中由域名example.org承担。域名指示请求的是哪台网络服务器。域名由若干用点号分隔的部分组成,从右向左阅读。最右边的org是顶级域名,它告诉用户该域名背后服务的一般用途。其左侧的example是二级域名,用于在同一顶级域名下区分不同的注册。314

路径/notes/first-page跟在域名之后,表示资源在网络服务器上的位置。在早期网络中,这样的路径代表服务器上的物理文件位置,而如今它主要是由网络服务器处理的抽象概念,不再对应任何物理实体。路径之后,问号引导查询字符串。在我们的例子中,view=compact是一个键值对,为网络服务器提供额外参数。服务器可以使用这些参数在返回资源之前进行额外处理。最后,井号引导片段标识符。这里的intro是资源内部的锚点,相当于文档中的一个书签。井号之后的部分永远不会随请求发送到服务器。3

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

现在保持示例的主机部分不变,只改变路径。如果把/notes/first-page改为/notes/second-page,域名和协议方案完全相同,但域名之后的字符串指向同一服务器上的另一个资源位置。路径是URL中区分同一域名下不同页面或文件的部分。你并没有对服务器实际如何处理这些路径做出任何断言,只是观察到字符串在路径段上有所不同。3

接下来只改变查询字符串。把view=compact替换为view=full,协议方案、域名和路径保持不变,只有问号之后的字符不同。这一观察表明查询是与路径独立的组成部分。网络服务器可以使用这些参数在返回资源之前做额外处理,而每台服务器对参数都有自己的规则。仅从字符串本身无法判断服务器实际会做什么不同的事情,只能注意到请求携带了不同的信息。3

你也可以完全移除片段。地址https://example.org/notes/first-page?view=compact在没有#intro部分的情况下仍然是一个完整且有效的URL。片段是可选的,只影响浏览器在获取资源后如何显示它。将这些变体并排比较,有助于你看到URL的每个片段都承担独立的角色,改变其中一个不一定会改变其他部分。3

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

记录你计划使用的每个地址的用途。对于这个假设示例,你可以写下:「这是主笔记页面,以紧凑布局显示,浏览器滚动到引言部分。」用日常语言写下用途,能迫使你思考这个地址应该完成什么,而不仅仅是它包含哪些字符。

把完整地址单独写在一行,然后在下方逐一列出各组成部分:协议方案、域名、路径、查询和片段。对于我们的例子,说明卡上应显示https为协议方案、example.org为域名、/notes/first-page为路径、view=compact为查询、intro为片段。这种布局能让你在之后把地址复制到链接或配置文件中时,容易发现遗漏的问号或错位的斜杠。

如果你的项目有多个页面,为每个地址各建一张说明卡。即使所有卡片的域名和协议方案都相同,分别书写也能防止你意外复用了错误页面的路径或查询。这些卡片在你向协作者解释站点结构或检查链接一致性时,也能作为快速参考。

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

说明卡写好后,对照实际字符串进行验证。以下步骤是作者建议的手工核对方法,不需要任何特殊工具。

这种方法能捕获常见错误,例如路径段之间缺少斜杠、问号出现在应该放井号的位置,或者查询参数只写了键没有写值。因为你是在将自己的笔记与原始字符串逐一比较,核对的准确度取决于你对每个字符的注意力。

最后检查片段。由于片段永远不会发送到服务器,那里的拼写错误不会破坏请求本身,但可能导致浏览器无法滚动到预期的部分。在说明卡上确认锚点名称与你在内容中定义的一致。

步骤 1

将完整URL从说明卡复制到一个纯文本编辑器或空白文档中,以便看到每个字符而不受格式干扰。

步骤 2

手工标记每个分隔符:在://前画一条线以分隔协议方案,在域名后的第一个/前画线以分隔权限与路径,在?前画线以分隔路径与查询,在#前画线以分隔查询与片段。

步骤 3

将每个标记出的片段与说明卡上的对应条目逐一比较。如果有任何片段不匹配,修正说明卡或地址后重复标记。

保留说明供以后写作或沟通使用

把完成的说明卡存放在你日后会经常查看的地方。一个简单的文本文件、项目管理工具中的笔记,甚至桌边的一张打印纸都可以。目标是拥有一份列出所有计划使用地址的统一参考,这样你每次写链接或向别人解释站点时,都不需要凭记忆重建结构。

当你添加新页面时,在现有卡片集上扩展,而不是从头开始。由于同一站点的域名和协议方案通常保持不变,你只需为每个新增页面记录新的路径、查询和片段。这使你的参考保持精简,并突出页面之间实际发生变化的部分。

每张说明卡写多详细由你自己决定。有人只记录完整地址和一行用途说明,有人则逐段拆解每个组成部分。只要卡片足够清晰,能让你日后无需猜测就能验证地址,两种方式都可行。书写和核对这些卡片的练习能培养你仔细阅读URL的习惯,这在调试失效链接或配置重定向时都会派上用场。

常见问题

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

不是。域名标识一台服务器,而URL是包含协议方案、域名、路径以及可选查询和片段的完整地址。域名只是URL内部的一个组成部分。13

井号后面的片段会发送到服务器吗?

不会。片段标识符永远不会随请求发送到服务器,它只由浏览器用来在已获取的资源中导航到特定位置。3

改变查询字符串会改变页面内容吗?

仅从URL字符串本身无法确定服务器会做什么。查询提供额外参数,每台网络服务器对参数都有自己的处理规则。改变查询可能改变返回的内容,也可能不变,取决于服务器的逻辑。3