从输入 URL 到显示页面:HTTP 基本操作过程

1. 解析 URL,确定通信目标

浏览器
HTTP 客户
DNS
域名 → IP
Web 服务器
HTTP 服务器
查询域名
返回 IP
得到服务器 IP 与端口

URL 提供了什么

  1. 协议决定使用 HTTP 或 HTTPS。
  2. 主机部分若为域名,先通过 DNS 得到服务器 IP 地址。
  3. 端口省略时使用协议默认端口;HTTP 通常为 TCP 80。
  4. 路径成为 HTTP 请求行中的请求目标。
DNS 负责找到主机;HTTP 负责请求资源。两者属于不同的应用层协议。

2. 建立 TCP 连接

浏览器
Web 服务器
TCP 80
SYN
SYN + ACK
ACK

为什么先建立连接

HTTP/1.0 和 HTTP/1.1 通常把报文交给 TCP 传输。TCP 先建立连接,再可靠地传送请求与响应。

这一阶段消耗约 1 RTT,但还没有传输 HTTP 请求。

HTTPS 还会在 TCP 连接之上进行 TLS 握手;本章按 HTTP 基本过程讨论。

3. 浏览器发送 HTTP 请求

GET /index.html HTTP/1.1
Host: www.example.com
Connection: keep-alive
空行

请求行说明方法、请求目标和版本;首部行携带主机、连接方式等附加信息。

请求通过已建立的 TCP 连接

浏览器
Web 服务器
HTTP 请求报文

服务器根据方法、路径和首部决定读取哪个资源、执行什么操作。

4. 服务器返回 HTTP 响应

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1250
空行
HTML 实体主体

从请求到响应首字节

服务器处理请求后,通过同一 TCP 连接返回状态行、首部和可选的实体主体。

从发出 HTTP 请求到收到响应首字节,约再经历 1 RTT;随后还需要对象传输时延。

因此 HTTP/1.0 请求一个对象的基本时间为:2 RTT + 对象传输时延。

5. 解析文档,继续请求引用对象

HTML
建立文档结构
CSS
应用样式
JavaScript
执行交互逻辑

浏览器解析 HTML 后,若发现图片、样式表或脚本等引用对象,还要继续发送 HTTP 请求。

连接是否继续使用

非持续连接:每个对象使用一个新的 TCP 连接。

持续连接:复用同一个 TCP 连接请求多个对象。

对象全部到达后,浏览器完成布局、绘制并显示页面。

HTTP 是请求-响应协议;页面显示则是浏览器在收到资源后的本地处理。