第一次准备网站时,浏览器地址栏里的那串字符看起来像一整块无法区分的文字。搞清楚哪一部分指向服务器、哪一部分指向具体页面,能帮助你更清楚地描述项目、规划站点结构,并在上线前发现拼写错误。
域名与完整URL分别回答什么问题
域名回答的是一个定位问题:你想联系互联网上的哪台服务器?域名为互联网上任何可用的网络服务器提供了人类可读的地址,解决了数字形式的IP地址难以记忆且可能随时间变化的问题。当有人在浏览器中输入example.org时,域名就是告诉系统该联系哪台机器的那一部分。1
完整URL回答的是一个更宽泛的问题:你想获取那台服务器上的哪个具体资源?URL是互联网上唯一资源的地址,也是浏览器用来检索已发布资源(如HTML页面、CSS文档和图片)的关键机制之一。域名把范围缩小到一台服务器,URL的其余部分则把范围缩小到那台服务器上的某一个具体条目。2
本文接下来将使用一个虚构的地址进行练习:https://example.org/notes/first-page?view=compact#intro 。这是一个仅用于拆解字符串的假设示例,不指向真实页面或已上线的服务器。你可以把它当作一个带标签的标本,随意拆分和重组,不会产生任何实际影响。
在本例中逐段标出各组成部分
第一个片段https是方案(scheme),它指示浏览器请求资源时必须使用的协议。对于网站来说,协议通常是HTTPS或其未加密版本HTTP。在本例中,方案告诉浏览器在连接服务器时使用安全连接。2
下一个片段example.org是域名,它标识正在请求哪台网络服务器。域名由多个部分组成,各部分以点号分隔,从右向左阅读。最右边的org是顶级域(TLD),它向用户传达该域名背后服务的一般用途。紧随顶级域之后的标签example则用于在同一顶级域下区分这个特定域名。12
域名之后是路径/notes/first-page。路径表示资源在网络服务器上的位置。在早期互联网中,这样的路径代表服务器上的实际文件位置,但如今它大多是服务器处理的一种抽象概念,并不对应真实的物理文件。你仍然可以把它理解为一条路线,帮助你缩小所请求内容的范围。2
问号与井号分别引导什么
在本例中,路径之后是?view=compact。问号引导URL的查询部分。查询参数是提供给网络服务器的额外键值对,每台服务器对参数的处理规则各不相同。这里view是键,compact是值。仅凭字符串本身无法判断服务器会如何使用这个参数,你只能观察到字符串中携带了它。2
最后一个片段#intro以井号开头,称为片段标识符或锚点。锚点相当于资源内部的一个书签,为浏览器提供指引,让它显示该书签位置的内容。值得注意的是,井号之后的部分不会随请求发送给服务器。片段只在资源加载完成之后才有意义。2
总结本例中的标点规则:问号始终标志查询部分的开始,井号始终标志片段的开始。如果一个URL同时包含两者,问号在前,井号在后。这一顺序由字符串的结构决定,与服务器如何处理这两部分无关。2
保持主机不变,对比不同路径与查询
现在保持主机部分example.org完全不变,只修改路径。如果写成https://example.org/notes/second-page,域名和方案完全相同,但路径指向了另一条路线。仅从字符串就能看出浏览器会向同一台服务器请求不同的资源。你无法仅从字符串判断该资源是否存在或包含什么内容。
接下来,保持路径不变,只修改查询。写成https://example.org/notes/first-page?view=full,就是将值从compact替换为full。服务器会收到不同的参数值,但字符串本身只记录了差异,并不揭示服务器如何响应。你是在比较两个字符串并标注它们在哪里分叉,而不是预测行为。
最后,完全去掉片段。地址https://example.org/notes/first-page?view=compact在没有井号的情况下依然有效。片段是可选的。你写出的每一种变体都是一个不同的字符串,每个不同的字符串原则上都可以指向不同的资源或显示状态。练习这些小替换能帮助你看清地址的哪一部分控制着哪一层的具体性。
为你的项目制作一张地址说明卡
记录你的项目将使用的每个地址的说明卡。每张卡应包含三项内容:用一句朴素的话说明该页面的用途、完整URL字符串的原样写法、以及各部分的标注拆解。对于我们的假设示例,用途可以写成「笔记的第一页,以紧凑视图显示,滚动到引言部分」。
将拆解结果记录为一个简单列表:方案为https,域名为example.org,路径为/notes/first-page,查询键为view、值为compact,片段为intro。在你制作的每张卡片上保持标签一致,意味着之后可以并排比较不同卡片,而不需要重新熟悉自己的记法。
选择一种容易更新的格式。纯文本文件、电子表格中的一行、或项目管理工具里的笔记都可以。重要的是这张卡片放在你以后确实会再次查看的地方,而不是埋在一个再也不会打开的草稿里。
手工复制与逐项标记来核对说明卡
说明卡写好之后,用手工复制和逐项标记的方式对照实际字符串进行核对。这能发现凭记忆编写地址时容易忽略的拼写错误、遗漏的斜杠和放错位置的标点。
如果每个标签都吻合,说明你的卡片与字符串一致。如果任何标签不吻合,修正卡片或字符串后重新检查。这个简单的循环能在混淆产生之前捕获大多数转录错误。
每次为项目新增一个地址时都使用同样的核对流程。每个地址只需一分钟,却能养成仔细阅读URL而非凭猜测的习惯。
步骤 1
从说明卡上复制完整URL,粘贴到下方空白行。不要凭记忆重新输入;使用复制粘贴,确保核对行上的字符串与卡片上的逐字符完全一致。
步骤 2
从左侧开始,在https上方标注「方案」。在example.org上方标注「域名」。在路径开头的斜杠处做标记,在/notes/first-page上方标注「路径」。圈出问号并在其上方写「查询开始」,然后将view=compact标注为查询内容。圈出井号并在其上方写「片段开始」,然后将intro标注为片段。
步骤 3
将每个标签与说明卡上的拆解列表逐一对照。确认方案一致、域名一致、路径一致、查询键和值一致、片段一致。如果任何标签与卡片不符,就找到了一处需要修正的差异。
常见问题
example.org是一个可以访问的真实网站吗?
不是。本文中example.org仅作为练习阅读URL字符串的假设占位符使用,不代表一个实际运行的项目或你能加载的页面。
井号后面的片段部分会发送给服务器吗?
不会。片段标识符不会随请求发送给服务器。它只在资源已经加载完成之后告诉浏览器滚动或聚焦到哪个位置。2
可以只修改查询的值而不改动URL的其他部分吗?
可以。你可以把compact替换为任何其他值,同时保持方案、域名、路径和片段不变。生成的字符串是一个不同的URL,但每个部分仍然可以独立编辑。