在发布任何内容之前,了解网站地址各部分的含义很有帮助。本文通过一个假设的URL逐一标注其组成部分,并展示如何用一张简单的说明卡记录它们,方便你在自己的规划笔记中复用。

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

考虑这个假设地址:https://example.org/notes/first-page?view=compact#intro。它并不是互联网上真实存在的页面,我们只是用这串字符来练习阅读网站地址的各个部分。尽管如此,它包含了理解域名与完整URL之间区别所需的全部要素。

域名回答的问题是「我在和哪台服务器对话」。域名是互联网基础设施的关键组成部分,因为它们为互联网上任何可用的网络服务器提供了人类可读的地址。计算机通过IP地址进行通信,但人们很难记住那些数字串,因此域名充当了方便的别名。12

完整URL回答的是一个更具体的问题:「我要的是那台服务器上的哪一个确切资源」。URL是互联网上唯一资源的地址,也是浏览器用来获取已发布资源(如HTML页面、图像或文档)的关键机制之一。如果说域名带你找到了正确的建筑,那么URL的其余部分告诉你的是哪一层、哪个房间、哪个书架。3

标出本例地址的每个部分

我们来逐段标注这个假设字符串。第一个片段https称为协议方案(scheme),它指示浏览器必须使用哪种协议来请求资源。对于网站来说,协议通常是HTTPS或其未加密版本HTTP。在我们的示例中,协议方案告诉浏览器使用安全连接。3

下一个片段example.org是域名,也称为主机部分,它标识了被请求的是哪台网络服务器。域名具有简单的结构,由若干部分组成,以点分隔,从右向左阅读。最右边的部分是顶级域名,在本例中是.org。它左边的标签example是二级域名。两者共同构成主机部分,将你的请求导向特定的服务器。13

主机之后是路径:/notes/first-page。路径指向网络服务器上的某个资源。在早期互联网中,这样的路径代表服务器上的物理文件位置,但如今它大多是网络服务器处理的抽象概念,并不对应任何物理实体。在我们的示例中,路径暗示了一个名为first-page的页面位于名为notes的栏目内,但我们只是在阅读字符串本身,并不声称任何服务器实际提供这些内容。3

查询字符串与片段:标点符号的含义

问号在我们的示例中引出了查询部分:?view=compact。查询参数是提供给网络服务器的额外键值对,当存在多个键值对时以和号分隔。网络服务器可以使用这些参数在返回资源之前进行额外处理。这里键是view,值是compact。我们只是在观察字符串结构,并不推断任何服务器实际会如何处理这个参数。3

井号引出了片段:#intro。锚点代表资源内部的一种书签,为浏览器提供指示,让它显示位于该书签位置的内容。值得注意的是,井号之后的部分(也称为片段标识符)永远不会随请求发送到服务器。这意味着片段只影响浏览器在已经接收到页面之后显示的内容。3

因此,这两个标点符号扮演着不同的角色。问号将路径与随请求一起发送到服务器的参数分隔开来;井号分隔的是片段,片段留在浏览器一侧,指向已返回文档中的某个位置。记住这一区别,有助于你阅读任何地址时不必猜测其背后服务器的行为。3

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

现在想象我们保持example.org不变,只替换路径。如果地址变成https://example.org/gallery/summer-photos?view=compact#intro,主机完全相同,但路径指向了一个完全不同的栏目。查询和片段恰好一样,然而被请求的资源会不同,因为路径变了。这说明路径是在同一台服务器内定位特定资源的部分。

接下来,保持主机和路径不变,只改变查询。比较https://example.org/notes/first-page?view=compact与https://example.org/notes/first-page?view=full。从字符串角度看,服务器、栏目和页面名称都相同,只有参数值不同。服务器是否真的会为这两个查询返回不同的内容,完全取决于那台服务器的配置方式,我们无法仅从地址本身判断。

最后,只改变片段。比较https://example.org/notes/first-page?view=compact#intro与https://example.org/notes/first-page?view=compact#conclusion。由于片段永远不会发送到服务器,两个请求到达服务器时完全一致。差异只在浏览器已经拿到文档并滚动到书签位置时才体现。当你决定片段是否应纳入地址记录,还是仅仅作为读者的便利工具时,这个观察很有用。

为项目写一张地址说明卡

记录一张简短的说明卡,用于你计划在项目中使用的所有地址。一张有用的说明卡包含三个字段:用一句话说明该地址的用途、你打算书写的完整URL字符串,以及逐行列出各部分并附上简短标签。对于我们的假设示例,用途可以写成「笔记栏目中第一篇笔记的紧凑视图,书签定位到引言标题」。完整地址就是字符串本身,拆解部分分别列出协议方案、主机、路径、查询和片段。

用自己的话写出用途,会迫使你决定这个地址到底是做什么用的。如果你无法清楚地表述用途,那就是一个信号:这个地址可能对你的需求来说过于复杂或命名不当。与此同时,拆解部分提供了一个参考,日后当你把地址复制到文档、邮件或另一个页面的链接中时,可以拿来对照。

选择你最方便维护的格式。有人喜欢纯文本文件,有人用电子表格每行记录一个地址。重要的是说明卡放在你日后真正会再次查看的地方,而不是埋在一个你永远不会重新打开的草稿文件夹里。

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

写完说明卡之后,用手动手动方式验证它。过程很简单:从说明卡中复制完整URL,粘贴到一个空白行,然后逐段检查,在每段上方或下方写出标签。这能捕捉到快速阅读时容易忽略的拼写错误、缺失的斜杠或错位的问号。

检查每个片段是否符合你已经了解的规则。协议方案应当是一个可识别的协议名称,后跟冒号和两个斜杠。主机应当是一个有效的域名,各标签以点分隔。路径应当以正斜杠开头。查询如果存在,应当以问号开头。片段如果存在,应当以井号开头。如果任何片段违反了这些模式,回去修正说明卡,再在其他地方使用该地址。

每次修改地址后都重复这一检查。即使是微小的编辑,比如添加末尾斜杠或更改参数值,也可能引入细微错误。三十秒的手动检查远比在分享给读者或嵌入已发布内容之后才发现链接损坏要划算得多。

步骤 1

从说明卡中复制完整URL,粘贴到文本编辑器或笔记应用中的一个空白行。

步骤 2

在冒号后面的两个斜杠之后放置一个小间隔或注释,标出协议方案与主机之间的边界。

步骤 3

标出主机之后第一个正斜杠处路径的起点、问号处查询的起点,以及井号处片段的起点。

步骤 4

逐段朗读每个已标注的片段,确认它与你在说明卡上写下的字段一致。如果有任何不同,更新说明卡以匹配修正后的字符串。

常见问题

URL中的片段部分会发送到服务器吗?

不会。片段标识符即井号之后的部分,永远不会随请求发送到服务器。它只是告诉浏览器在页面加载完成后滚动或聚焦到哪个位置。3

仅通过阅读URL能判断服务器会做什么吗?

你可以识别地址的结构部分,但无法确定服务器如何处理它们。每台网络服务器对参数有自己的规则,要确认某台特定服务器是否在处理参数,唯一可靠的方式是询问服务器所有者。3

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

不是。域名标识一台网络服务器,是URL内部的一个组成部分。完整URL在域名的基础上增加了协议方案,还可能包含路径、查询参数和片段,用以精确定位该服务器上的某个特定资源。13