从输入 URL 到显示页面:HTTP 基本操作过程
1. 解析 URL,确定通信目标
浏览器
HTTP 客户
HTTP 客户
DNS
域名 → IP
域名 → IP
Web 服务器
HTTP 服务器
查询域名
返回 IP
得到服务器 IP 与端口
HTTP 服务器
URL 提供了什么
- 协议决定使用 HTTP 或 HTTPS。
- 主机部分若为域名,先通过 DNS 得到服务器 IP 地址。
- 端口省略时使用协议默认端口;HTTP 通常为 TCP 80。
- 路径成为 HTTP 请求行中的请求目标。
DNS 负责找到主机;HTTP 负责请求资源。两者属于不同的应用层协议。
2. 建立 TCP 连接
浏览器
Web 服务器
TCP 80
SYNSYN + ACKACKTCP 80
为什么先建立连接
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 是请求-响应协议;页面显示则是浏览器在收到资源后的本地处理。