前言
经常开发的小伙伴估计对http都不陌生,下面来看看的之间的区别是啥?
一、连接管理
HTTP/1.0
每个请求需单独建立和关闭 TCP 连接,无法复用,导致高延迟和资源浪费。
无状态设计,服务器不记录客户端上下文信息。
HTTP/1.1
默认启用持久连接(Keep-Alive),允许同一 TCP 连接处理多个请求,减少连接建立开销。
引入管道化(Pipelining)机制,支持批量发送请求,但服务器必须按顺序返回响应,仍存在队头阻塞问题。
HTTP/2
多路复用(Multiplexing)技术,单连接上可并发处理多个请求/响应,通过二进制分帧实现流优先级管理,彻底解决队头阻塞。
二、数据传输机制
HTTP/1.x
基于文本格式传输(如纯文本头部和内容),解析效率低且易出错。
HTTP/2
二进制分帧传输:将数据拆分为更小的二进制帧,提升解析效率和传输可靠性。
头部压缩(HPACK 算法):减少重复头部字段的传输开销,降低带宽占用。
三、功能扩展
HTTP/1.1
支持 Host 头字段,允许单服务器托管多个域名。
增强缓存控制(如 Cache-Control 头部)。
HTTP/2
服务器推送(Server Push):主动推送客户端可能需要的资源(如 CSS/JS),减少额外请求延迟。
流优先级控制:允许客户端指定资源加载优先级,优化页面渲染效率。
总结对比表
特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2.0 |
---|---|---|---|
连接方式 | 飞持久连接 | 持久连接(默认) | 多路复用单连接 |
传输格式 | 文本 | 文本 | 二进制分帧 |
并发能力 | 单请求/连接 | 管道化(顺序响应) | 多路复用(并行响应) |
头部压缩 | 无 | 无 | HPACK算法压缩 |
服务器主动推送 | 不支持 | 不支持 | 支持 |
队头阻塞问题 | 存在 | 管道化下仍存在 | 完全解决 |