一、HTTP/1.0:最原始的短连接时代
HTTP/1.0 是早期正式标准化的版本,它的特点非常简单:
-
默认短连接每发一个 HTTP 请求,就建立一次 TCP 连接,请求结束立刻断开。请求 1 → 建连 → 传数据 → 断连请求 2 → 建连 → 传数据 → 断连
-
效率极低 打开一个网页要加载几十张图片、JS、CSS,就会频繁三次握手 + 四次挥手,延迟极高。
-
可手动开启长连接通过请求头:
Connection: keep-alive让 TCP 连接暂时不关闭,供多个请求复用,但不是默认行为。
一句话总结:HTTP/1.0 能用,但很慢,连接无法复用,不适合现代复杂网页。
二、HTTP/1.1:统治互联网二十年的王者
HTTP/1.1 是真正大规模使用的版本,直到今天仍有大量系统在跑。它解决了 1.0 的核心痛点。
1. 默认长连接(Keep-Alive)
从 HTTP/1.1 开始,TCP 连接默认不关闭,可以被多个请求复用。不用每次请求都重新建连,大幅减少握手开销。
2. 分块传输编码(Chunked)
服务端不用等数据全部生成完再返回,可以边生成边发。适合大文件、动态内容,避免长时间阻塞。
3. 管道机制(Pipeline)
在同一个 TCP 连接里,客户端可以同时发送多个请求,不用等上一个响应回来再发下一个。
但它有个致命问题:**队头阻塞(Head-of-Line Blocking)**如果第一个请求卡住,后面所有请求都得等。
一句话总结:HTTP/1.1 解决了连接复用问题,但依然受队头阻塞困扰,并发能力有限。
三、HTTP/2.0:现代高性能协议的开始
HTTP/2 不是在 1.1 上小修小补,而是底层重构,性能提升巨大。
1. 二进制协议
HTTP/1.1 是文本协议 ,头信息是文本,数据体可以是文本或二进制。HTTP/2 统一为二进制格式,解析更快、更紧凑、更安全。
2. 完全多路复用(Multiplexing)
这是 HTTP/2 最核心的升级。多个请求 / 响应可以在同一个 TCP 连接里同时传输,互不阻塞。
- 不用排队
- 不存在队头阻塞
- 一个连接就能搞定所有资源
对比:
- HTTP/1.1:一队人排队过独木桥
- HTTP/2:宽阔大桥,多车道同时跑
3. 头部压缩(HPACK)
HTTP 是无状态协议,每次请求都要带上 Cookie、User-Agent 等大量重复头信息。HTTP/2 对头部进行压缩,大幅减少传输体积。
4. 服务端推送(Server Push)
服务端可以主动向客户端推送资源,不用等客户端请求。比如浏览器请求 HTML,服务端直接把 CSS、JS 一起推过去,减少请求次数。
一句话总结:HTTP/2 更快、更并发、更省流量、支持服务端推送,是现代网站的标配。
四、一张表看懂三者核心区别
表格
| 特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2.0 |
|---|---|---|---|
| 连接方式 | 短连接(默认) | 长连接(默认) | 长连接 + 多路复用 |
| 数据格式 | 文本 | 文本 | 二进制 |
| 并发能力 | 极差 | 一般(仍有队头阻塞) | 极强(无队头阻塞) |
| 头部数据 | 无压缩 | 无压缩 | HPACK 压缩 |
| 服务端推送 | 不支持 | 不支持 | 支持 |
| 传输方式 | 全部生成后传输 | 支持分块传输 | 二进制流传输 |
- 服务器未经请求,主动向客户端发送资源。