HTTP 1.0 与 HTTP 2.0 核心区别详解:从文本到二进制、从阻塞到多路复用

张开发
2026/4/5 23:16:21 15 分钟阅读

分享文章

HTTP 1.0 与 HTTP 2.0 核心区别详解:从文本到二进制、从阻塞到多路复用
HTTP 1.0 与 HTTP 2.0 核心区别详解从文本到二进制、从阻塞到多路复用01. 前言为什么我们要对比 HTTP 1.0 和 2.002. HTTP 1.0基础但“短视”的早期设计2.1 核心特点2.2 典型流程图HTTP 1.0 请求过程2.3 主要问题03. HTTP 2.0性能重构的二进制时代3.1 核心改进3.2 多路复用流程图3.3 HTTP 2.0 如何解决 1.0 的痛点04. 详细对比表HTTP 1.0 vs HTTP 2.005. 重要说明不是所有“队头阻塞”都解决了06. 实践建议什么时候还选 1.0什么时候上 2.007. 总结一张图看懂演进核心The Begin点点关注收藏不迷路The End点点关注收藏不迷路01. 前言为什么我们要对比 HTTP 1.0 和 2.0HTTP 协议是互联网的基石。从 HTTP 0.9 的纯文本传输到 1.0 正式支持请求头/响应头再到 1.1 引入持久连接直到HTTP 2.0彻底重构二进制分帧与多路复用每一次演进都为了解决性能瓶颈。很多开发者对 1.0 和 2.0 的区别停留在“2.0 更快”的模糊认知上。今天我们从协议格式、连接模型、队头阻塞、服务端推送等角度带流程图详细对比。02. HTTP 1.0基础但“短视”的早期设计2.1 核心特点每个请求/响应需要建立新的 TCP 连接短连接。请求完成后立即断开下一个请求必须重新三次握手。支持 GET、POST、HEAD 方法。有状态响应码、MIME 类型Content-Type 引入。无 Host 头导致虚拟主机难实现后来 1.1 才加。2.2 典型流程图HTTP 1.0 请求过程客户端 服务器 | | |---- 建立 TCP 连接 ----| |--- SYN-ACK -----------| |---- ACK ---------------| | | |---- GET /index.html --| |--- 200 OK HTML -----| | | |---- FIN ---------------| |--- ACK ---------------| |--- FIN ---------------| |---- ACK ---------------| | | | (下一次请求重新握手) |2.3 主要问题连接无法复用每请求一次 TCP 握手 慢启动延迟高。队头阻塞 (HOL blocking)一个请求未响应前无法发下一个请求虽然可以并发多个 TCP 连接但浏览器限制 4~6 个。头部冗余巨大每次请求都重复携带 User-Agent、Accept 等大量文本头。03. HTTP 2.0性能重构的二进制时代3.1 核心改进二进制分帧层将请求/响应拆分为更小的帧Header 帧、Data 帧。多路复用在一个 TCP 连接上交错发送多个请求/响应的帧。头部压缩HPACK消除重复头部减少传输量。服务端推送服务器可主动推送相关资源如 HTML 推送 CSS/JS。请求优先级可指定资源加载优先级。3.2 多路复用流程图TCP 连接 (单一) │ ├── 请求1: 帧 A1 (HEADERS) ──┐ ├── 请求2: 帧 B1 (HEADERS) ──┤ ├── 请求1: 帧 A2 (DATA) ──┤ 交错发送/接收 ├── 请求3: 帧 C1 (HEADERS) ──┤ 不阻塞彼此 ├── 请求2: 帧 B2 (DATA) ──┤ ├── 请求1: 帧 A3 (DATA) ──┘ │ └── 所有请求共享同一 TCP 连接 服务端响应同理帧可以乱序但最终按 Stream ID 组装。3.3 HTTP 2.0 如何解决 1.0 的痛点问题HTTP 1.0 表现HTTP 2.0 解决方式连接无法复用每次请求新连接延迟高单一持久连接所有请求多路复用队头阻塞应用层请求串行前一个慢则后一个等帧级别交错无应用层阻塞头部冗余纯文本每次重复数百字节HPACK 压缩动态表 静态表体积减少85%服务端被动响应只能客户端请求什么返回什么服务端推送PUSH_PROMISE协议可读性文本协议抓包易读但效率低二进制帧机器高效解析04. 详细对比表HTTP 1.0 vs HTTP 2.0对比维度HTTP 1.0HTTP 2.0协议格式文本ASCII二进制帧HEADERS/DATA/PRIORITY等连接模型短连接非持久长连接多路复用并发请求方式需多 TCP 连接浏览器限制 4~6单 TCP 连接内无限并发流Stream ID队头阻塞有应用层 HOL无帧交错但 TCP 层 HOL 仍存在头部压缩无Gzip 仅压缩 bodyHPACK 压缩索引表 霍夫曼编码服务端推送不支持支持PUSH_PROMISE 帧优先级/依赖无支持流优先级与依赖树流量控制TCP 窗口独立流级流量控制WINDOW_UPDATETLS 要求可选多数实现要求h2 over TLS请求方法/状态码方法少GET/POST/HEAD兼容 1.x 方法扩展状态码05. 重要说明不是所有“队头阻塞”都解决了HTTP 2.0 解决了应用层的队头阻塞但在 TCP 层仍存在TCP 队头阻塞如果 TCP 连接丢失一个包后面的所有帧即便属于不同请求必须等待重传完成。这也是HTTP 3.0 (QUIC)引入的原因基于 UDP 实现每个流独立丢包恢复。06. 实践建议什么时候还选 1.0什么时候上 2.0仍然只用 HTTP 1.0 的场景极简嵌入式设备、老旧客户端、纯文本 API 且单次请求为主。但大多数场景应至少升级到 HTTP 1.1。强烈推荐 HTTP 2.0 的场景高并发 Web 页面大量小资源 CSS/JS/图标API 网关需要低延迟移动端网络减少连接数省电需要服务端推送如资源预加载当前实际线上绝大部分已使用 HTTP 1.1 或 2.0纯粹的 1.0 几乎只存在于历史系统或教学示例中。07. 总结一张图看懂演进核心HTTP 1.0 → HTTP 2.0 短连接 单一长连接 文本请求/响应 二进制帧流 串行请求 多路复用 无压缩头 HPACK 压缩 无推送 服务端推送HTTP 1.0是 Web 起步期产物简单但低效。HTTP 2.0保留了 1.x 语义方法/状态码/URI但彻底重构了传输层效率。

更多文章