HTTP/2

协议和标准
HTTP的重要修订版本,引入了多路复用、头部压缩和相对于HTTP/1.1的性能改进。
← 返回词汇表

什么是 HTTP/2?

HTTP/2 是 HTTP 协议的一次重大修订(标准化为 RFC 7540),引入二进制分帧、多路复用、标头压缩和服务器推送等机制,相比 HTTP/1.1 大幅提升 Web 性能。

HTTP/2 与 HTTP/1.1 的比较

特性HTTP/1.1HTTP/2
格式基于文本二进制
连接多个(每个主机 6-8 个)单个多路复用连接
请求处理顺序处理并行流
标头压缩HPACK 压缩
服务器推送不支持支持
优先级流优先级

HTTP/2 的工作方式

HTTP/1.1 (Head-of-Line Blocking):

Connection 1: Request A ──────────► Response A

Connection 2: Request B ──────────► Response B

Connection 3: Request C ──────────► Response C

(Multiple connections, sequential per connection)

HTTP/2 (Multiplexing):

Single Connection:

├── Stream 1: Request A ──► Response A

├── Stream 2: Request B ──► Response B

├── Stream 3: Request C ──► Response C

└── All interleaved on same connection

主要特性

二进制分帧层

HTTP/2 Frame Structure:

┌─────────────────────────────────────┐

│ Length (24 bits) │

├─────────────────────────────────────┤

│ Type (8 bits) │ Flags (8 bits) │

├─────────────────────────────────────┤

│ Stream Identifier (32 bits) │

├─────────────────────────────────────┤

│ Frame Payload (variable) │

└─────────────────────────────────────┘

HPACK 标头压缩

场景HTTP/1.1 标头HTTP/2 标头
首次请求~800 字节~800 字节
后续请求每次约 ~800 字节~20-50 字节(已索引)

流优先级

Priority Tree:

Root (connection)

├── CSS (weight: 256, high priority)

├── JavaScript (weight: 220)

└── Images (weight: 110, lower priority)

服务器要求

服务器HTTP/2 支持
nginx1.9.5+
Apache2.4.17+ (mod_http2)
Node.js8.4+ (native)
IISWindows 10/Server 2016+

性能收益

最佳实践

1. 启用 TLS:HTTP/2 实际上要求 HTTPS(浏览器会强制执行)

2. 减少域名分片:多个域名现在反而会损害性能

3. 停止拼接文件:多路复用降低了打包的必要性

4. 谨慎使用服务器推送:只推送关键资源

5. 监控性能:验证 HTTP/2 是否改善了具体使用场景

HTTP/2 通过更高效地利用网络连接,为大多数网站带来显著的性能提升。

将知识付诸实践

使用 DomScan 的 API 检查域名可用性、健康状态等。