http 的成长史
·
更新于 ·
giftia
HTTP/1.0
- 短连接:每次请求新建 TCP 连接,完成后断开
- 无 Host 头:不支持虚拟主机
- 不支持断点续传
HTTP/1.1
- 长连接:默认
Connection: keep-alive,复用 TCP 连接 - 管道化:同一连接可并发多个请求,但响应必须按序返回(队头阻塞)
- 新增缓存控制:
Cache-Control、ETag - 新增 Host 字段:支持虚拟主机
- 支持断点续传:
Range请求头
HTTP/2.0
- 二进制分帧:报文拆为帧传输,按帧标识符重组
- 头部压缩:HPACK 算法,客户端和服务端维护头部索引表
- 多路复用:一个 TCP 连接处理多个 Stream,解决 HTTP/1.1 队头阻塞
- 服务器推送:服务端可主动推送资源
HTTP/3.0
- 基于 QUIC(UDP):减少 TCP + TLS 握手耗时
- 无队头阻塞:独立 Stream,丢包不影响其他流
- 连接迁移:用 64 位随机数标识连接(非 IP+端口),网络切换不断连
- QPACK 头部压缩:改进的头部压缩算法
对比
| 特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2.0 | HTTP/3.0 |
|---|---|---|---|---|
| 连接 | 短连接 | 长连接 | 长连接 | QUIC 长连接 |
| 数据格式 | 文本 | 文本 | 二进制分帧 | 二进制分帧 |
| 多路复用 | 不支持 | 不支持 | 支持 | 支持 |
| 队头阻塞 | 存在 | 存在 | TCP 层阻塞 | 无 |
| 头部压缩 | 不支持 | 不支持 | HPACK | QPACK |
| 传输协议 | TCP | TCP | TCP | QUIC (UDP) |