从1.0到3.0的性能革命
HTTP/1.0(1996)
- 短连接模式:每次请求需新建TCP连接,如同每次点餐都要重新排队
- 基础功能框架:GET/POST/HEAD方法、状态码、首部字段奠定标准
- 性能痛点:加载含10张图片的网页需建立11次连接(1个HTML+10个图片)
# 典型HTTP/1.0请求示例
GET /index.html HTTP/1.0
User-Agent: Mozilla/5.0
HTTP/1.1(1999)
- 长连接机制:Connection: keep-alive 实现TCP连接复用
- 管道化传输:允许连续发送多个请求(但响应必须按序返回)
- 关键创新:
- Host头支持虚拟主机
- 分块传输编码
- 缓存控制机制
队头阻塞问题:如同高速公路上的抛锚车辆,前一个未完成的请求会阻塞后续所有请求
HTTP/2(2015)
- 二进制分帧层:将消息分解为独立帧传输
- 多路复用技术:在单个连接上并行交错传输多个请求/响应
- 头部压缩:HPACK算法减少重复头部数据
- 服务器推送:主动推送CSS/JS等依赖资源
HTTP/3(2022)
- 传输层革命:基于UDP协议实现QUIC层
- 零RTT握手:首次连接即可立即发送数据
- 突破性改进:
- 解决TCP队头阻塞
- 连接迁移能力(切换网络不断连)
- 前向纠错技术
QUIC优势对比实验:
网络环境 | HTTP/2加载时间 | HTTP/3加载时间 |
---|---|---|
5%丢包率 | 2.8s | 1.2s |
200ms延迟 | 3.1s | 1.5s |
版本对比全景图
特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
---|---|---|---|---|
连接方式 | 短连接 | 长连接 | 多路复用 | QUIC流 |
传输协议 | TCP | TCP | TCP | UDP+QUIC |
头部压缩 | 无 | 无 | HPACK | QPACK |
队头阻塞 | 严重 | 存在 | 流级别 | 无 |
加密要求 | 无 | 无 | 非必须 | 强制TLS |
服务器推送 | 不支持 | 不支持 | 支持 | 支持 |