HTTP 各版本演进与区别
一、HTTP 是什么
HTTP(HyperText Transfer Protocol)超文本传输协议,是应用层协议,基于 TCP(HTTP/3 基于 UDP),用于客户端与服务端通信。核心特点:无状态、简单可扩展、明文传输。
二、HTTP/0.9(1991)—— 极简原型
特点
- 只有 GET 方法
- 只有请求行,无请求头、响应头
- 响应只有 HTML 文本
- 一次请求 = 一次连接,连接立即关闭
- 无状态、无缓存、无错误码
示例
GET /index.html
定位
最原始协议,仅能获取简单网页,几乎不用。
三、HTTP/1.0(1996)—— 初步完善
新增能力
-
新增请求方法:POST、HEAD
-
引入 请求头 / 响应头
- Content-Type、Content-Length、Authorization…
-
支持多种资源:HTML、图片、视频、文件
-
支持状态码、缓存、重定向
-
支持长连接(但默认还是短连接)
缺点
- 每个请求必须新建 TCP 连接,三次握手开销大
- 队头阻塞严重
- 无 Host 头,一台服务器只能绑一个域名
四、HTTP/1.1(1999)—— 统治时代
目前最广泛、最经典的版本,统治互联网 20 年。
核心改进
- 默认长连接(Keep-Alive)一个 TCP 连接可发送多个请求,大幅减少握手开销。
- Host 请求头一台服务器可部署多个网站(虚拟主机)。
- 更多请求方法PUT、DELETE、OPTIONS、PATCH 等,支持 RESTful。
- 缓存机制增强ETag、Cache-Control、If-Modified-Since 等。
- 分块传输Transfer-Encoding: chunked,支持大文件流式传输。
- 管道化(Pipeline)可同时发多个请求,但依旧队头阻塞。
HTTP/1.1 致命问题
- 队头阻塞(Head-of-line Blocking)一个请求卡住,后面所有请求都排队。
- 头部巨大、无压缩、重复传输 Cookie、User-Agent。
- 并发有限,浏览器一般同域名开 6~8 个连接。
五、HTTP/2(2015)—— 性能革命
基于 Google SPDY 协议,目标:更快、更安全、更并发。
核心特性
- 二进制分帧不再是文本协议,拆成更小的 “帧”,有序传输。
- 多路复用(Multiplexing)****一个 TCP 连接,同时传输无数请求 / 响应真正解决队头阻塞(应用层)。
- 头部压缩 HPACK去掉重复头部,大幅减少体积。
- 服务器推送(Server Push)服务端主动把 CSS、JS 推给客户端,不用等浏览器请求。
- 流量控制、优先级
仍存在的问题
TCP 层队头阻塞依旧存在一个丢包 → 整个连接等待重传。
六、HTTP/3(2022 正式标准化)—— 未来主流
彻底解决 TCP 队头阻塞,基于 QUIC 协议 + UDP。
核心改进
- 底层从 TCP → UDP + QUIC
- 无队头阻塞每个流独立,丢包只影响当前流。
- 0-RTT 握手复用连接,几乎无延迟。
- 连接迁移切换 Wi‑Fi / 流量,不断线、不重连。
- 内置加密,安全更强
现状
- 主流浏览器、CDN 都已支持
- 移动端、弱网环境优势巨大
- 未来会逐步替代 HTTP/2
七、HTTP 各版本对比总结(表格版)
| 版本 | 协议 | 连接 | 队头阻塞 | 头部 | 核心亮点 |
|---|---|---|---|---|---|
| HTTP/0.9 | 文本 | 短连接 | 严重 | 无 | 极简 |
| HTTP/1.0 | 文本 | 短连接 | 严重 | 有 | 完善基础 |
| HTTP/1.1 | 文本 | 长连接 | 应用层阻塞 | 有 | 长连接、Host、缓存 |
| HTTP/2 | 二进制 | 单连接多流 | TCP 层阻塞 | HPACK | 多路复用、推送 |
| HTTP/3 | QUIC/UDP | 多路流 | 无 | QPACK | 0-RTT、无阻塞、迁移 |
八、一句话记忆
- HTTP/1.1:能用,但慢
- HTTP/2:性能起飞,但受限于 TCP
- HTTP/3:彻底解决阻塞,未来标配