🔌 第一章 浏览器生成消息
📄 一句话概括

浏览器解析 URL 的规则只有一条——从协议名后的斜杠开始切:第一个斜杠之前是服务器名,之后全是要访问的路径;端口可以省略,缺省时用 80。

📝 本节和前面几节的关系

1.1.1 说浏览器按协议名选工序;本篇接着讲同一件事的下一刀——把地址切成【找谁】和【要什么】两半。

一、切分规则一条

URL 从协议名后面的 / 开始数:第一个 / 之前是服务器名, 之后的部分全是路径——要访问的对象写在这后半截里。 服务器名后面还可以跟 :端口,写省略时 http 默认 80。

二、路径决定访问对象

/dir1/file1.html 这样的路径说明要取的是哪个文件; 没有路径(只写域名)就是访问根目录——详见下一节省略规则。

三、解析完拿到什么

解析完成后浏览器手里有三样东西:访问方法(协议)、 服务器名(待翻译成 IP)、路径(待写进请求消息)。 本篇解决【对什么】的一半,另一半在 DNS(1.2 节)。

四、动手 Demo:解析器视角过一遍 URL

五种常见写法,让小脚本逐一切给你看:

urls = ['http://www.lab/dir/file.html',
       'http://www.lab/dir/',
       'http://www.lab:8080/x',
       'http://www.lab']
for u in urls:
    _, _, rest = u.partition('://')
    auth, _, path = rest.partition('/')
    host, _, port = auth.partition(':')
    print(host, '| 端口', port or '缺省80', '| 路径 /' + path)

实跑输出:

--------------------------------------------------------------------
解析器视角过一遍 URL
--------------------------------------------------------------------
  同一台服务器,五种写法,解析结果对比:

  输入的 URL                       解析出的服务器名         解析出的路径
  -------------------------------------------------------------------------
  http://www.lab/dir/file.html     www.lab                  /dir/file.html
  http://www.lab/dir/              www.lab                  /dir/(目录)
  http://www.lab/file              www.lab                  /file(文件)
  http://www.lab:8080/x            www.lab(端口 8080)     /x
  http://www.lab                   www.lab                  /(根)
  -------------------------------------------------------------------------

  规则就一条:从协议名后面的 / 开始数,第一个 / 之前是服务器名,
  之后全是要访问的路径——【对什么】已经写明白了。

注意 8080 那行:端口显式写出来时浏览器不再用默认值, 服务器端也要真有程序在 8080 上守着才通。

30 秒实验

  1. 在地址栏输入一条带 :80 的网址和一条不带的,确认访问结果一样。
  2. 故意把服务器名里的点去掉一个,看解析会出什么问题。
  3. 打开开发者工具的网络面板,看第一条请求的完整 URL 长什么样。

常见误区

  1. 以为服务器名后面的 / 是装饰——它是服务器名和路径的分界线。
  2. 以为端口随便填都能通——必须服务器端真的有人在那个端口上监听。
自测三问(点开对答案) 1. URL 里第一个斜杠之前的部分是什么? —— 服务器名(可能带端口)。 2. 省略端口时,http 默认用哪个端口? —— 80(https 是 443)。 3. 解析完成后浏览器拿到哪三样东西? —— 访问方法(协议)、服务器名、路径。

相关笔记