http
http/1.0
- 短连接
- 无状态设计
http/1.1
- 持久连接 默认启用
Keep-Alive,单 TCP 连续处理多个请求 - 管道化设计 支持请求批量发送,但响应必须按序返回,存在队头阻塞
http/2
- 多路复用 二进制分帧技术实现请求/响应并行传输,彻底解决队头阻塞
- 二进制传输
- 头部压缩 HPACK 算法减少冗余头部数据
- 服务器推送 主动将关联资源推送给客户端,减少延迟
http/3
- QUIC 协议 基于 UDP 替代 TCP,实现 0-RTT 快速握手,避免传输层队头阻塞
- 连接迁移 网络切换时(如 WiFi 转 4G)保持连接不中断
常见问题
1. 什么是队头阻塞
- TCP 传输层队头阻塞 因丢包重传引发全局阻塞,可以通过http/3的QUIC 协议解决
- HTTP 应用层队头阻塞 因管道化设计响应顺序依赖引发局部阻塞,可以通过http/2的多路复用,二进制分帧传输可以解决
2. 持久化连接和多路复用有什么差别
| 特性 | 持久化连接(HTTP/1.1) | 多路复用(HTTP/2) |
|---|---|---|
| 复用单位 | TCP 连接复用(同一连接顺序处理请求) | 请求/响应流复用(单连接并行传输多个流) |
| 并发能力 | ❌ 请求必须串行处理(即使开启管道化) | ✅ 多个请求/响应可并行传输 |
| 数据传输格式 | 文本格式(可读性高,解析效率低) | 二进制分帧(高效解析,支持乱序传输) |
| 阻塞问题 | 存在队头阻塞(慢请求阻塞后续响应) | 彻底解决应用层队头阻塞 |
3. tcp和quic的区别
| 特性 | TCP | QUIC |
|---|---|---|
| 传输基础 | 基于IP协议,需独立TLS加密 | 基于UDP,内置TLS 1.3加密 |
| 连接标识 | 依赖IP+端口,网络切换需重建连接 | 使用64位Connection ID,支持IP变更无缝迁移 |
| 默认加密 | 需额外配置TLS/SSL | 强制加密通信,首包即安全 |
| 丢包恢复 | 依赖超时重传,ACK确认效率低 | 显式包编号 + ACK范围反馈,精准重传 |