HTTP1.0和2.0有什么区别?
重要内容
主要从连接方式、数据传输格式、头部压缩等角度来分析两者之间的区别
连接方式
- HTTP/1.0
- 短连接:每个请求需要单独建立一次 TCP 连接,请求完成后立即关闭
- 队头阻塞(Head-of-Line Blocking) :同一连接中,前一个请求未完成时,后续请求会被阻塞
- HTTP/2.0
- 持久连接:默认复用连接,减少 TCP 握手和慢启动的延迟
- 多路复用(Multiplexing) :单个 TCP 连接可以并发处理多个请求和响应,避免队头阻塞
数据传输格式
- HTTP/1.0
- 文本格式 :请求和响应以纯文本形式传输(如
GET /index.html HTTP/1.0
),解析效率低,容易出错
- 文本格式 :请求和响应以纯文本形式传输(如
- HTTP/2.0
- 二进制分帧(Binary Framing) :将数据分割为更小的二进制帧(如 HEADERS 帧、DATA 帧),传输高效且错误率低
- 流(Stream) :每个请求/响应分配一个唯一流 ID,支持优先级和依赖关系控制
头部压缩
- HTTP/1.0(无压缩):每次请求需重复发送完整的头部(如 Cookie、User-Agent),浪费带宽
- HTTP/2.0(HPACK 压缩算法):通过静态表和动态表压缩头部,减少冗余数据(典型压缩率可达 50%-90%)
服务器推送
- HTTP/1.0(无推送功能):客户端必须主动请求每个资源(如 CSS、JS)
- HTTP/2.0(主动推送功能):服务器可预测客户端需求,提前推送相关资源(如请求 HTML 时自动推送 CSS),减少往返延迟
总结
特性 | HTTP 1.0 | HTTP 2.0 |
---|---|---|
连接管理 | 短连接 | 单连接多路复用 |
数据传输 | 文本格式 | 二进制分帧 |
头部处理 | 无压缩 | HPACK压缩 |
队头阻塞 | 存在(应用层) | 无(应用层) |
典型延迟 | 高(多次握手) | 低(多路复用) |
主要应用场景 | 静态网页 | 高并发Web应用 |
扩展知识
HTTP 版本演进
头部压缩 QPACK 与 HPACK 的对比
- HPACK:是HTTP 2.0 中用于头部压缩的机制,依赖于数据包的有序交付。HPACK通过静态表和动态表来管理头部字段,以减少重复数据的传输量。然而,由于其依赖顺序传输,HPACK在QUIC协议中容易导致头部阻塞问题
- QPACK:是HTTP3.0中为QUIC设计的头部压缩算法,解决了HPACK在无序流中的局限性。QPACK采用霍夫曼编码和查找表机制,同时引入了静态表和动态表的概念,用于高效管理头部字段的压缩和解码