HTTP进化史:从1.0到3.0的核心变革

发布时间:2026/6/12 16:29:56

HTTP进化史:从1.0到3.0的核心变革 引言前面五篇我们讲了 HTTP 的报文结构、缓存、Cookie/Session/Token、HTTPS 加密和 TLS 握手。这些都是基于 HTTP/1.1 的。但 HTTP 已经发展了三十多年从最初的 0.9 到如今的 3.0经历了巨大变革。HTTP/1.1 最大的痛点是队头阻塞——一个连接上只能同时处理一个请求必须排队。HTTP/2 用多路复用解决了这个问题HTTP/3 更进一步换掉了底层的 TCP用QUIC基于 UDP实现了 0-RTT 连接和彻底的队头阻塞消除。本文将系统讲解 HTTP 各版本的核心改进和原理。第一部分HTTP/1.0 — 短连接时代一、主要特性HTTP/1.0 相比 0.9 的重大改进引入了请求头和响应头增加了 POST、HEAD 方法引入了状态码支持多种 Content-Type二、致命缺陷短连接第二部分HTTP/1.1 — 长连接与管道化一、核心改进改进说明长连接Connection: keep-alive默认一个连接可以发多个请求Host 头一台服务器托管多个网站管道化不必等上一个响应回来就能发下一个请求分块传输Transfer-Encoding: chunked动态内容边生成边发送缓存增强Cache-Control、ETag范围请求Range: bytes0-1023断点续传二、长连接 vs 短连接三、管道化Pipelining四、HTTP/1.1 的队头阻塞管道化的致命缺陷响应必须按顺序返回。如果第一个请求的响应很慢比如查数据库耗时 3 秒后面的请求全被堵住。第三部分HTTP/2 — 多路复用一、HTTP/2 的核心改进改进说明二进制分帧不再用文本改用二进制帧多路复用一个连接并发处理多个请求/响应头部压缩HPACK 算法压缩请求头/响应头服务器推送服务器可以主动推送资源给浏览器流优先级可以指定资源加载优先级二、二进制分帧HTTP/2 把报文拆成帧Frame每个帧属于一个流Stream。不同流的帧可以交错传输。三、多路复用解决队头阻塞四、头部压缩HTTP/1.1 每次请求都携带完整头部Cookie 和 User-Agent 等每次重复传输。HTTP/2 用HPACK算法压缩头部第一次传输完整的头部后续只传输变化的字段双方维护一个字典用索引代替完整字符串五、服务器推送六、HTTP/2 的队头阻塞TCP 层面的HTTP/2 解决了 HTTP 层面的队头阻塞但TCP 层面仍然存在队头阻塞。TCP 是可靠传输一个包丢了后续所有包都要等它重传——即使它们属于不同的流。第四部分HTTP/3 — QUIC 协议一、HTTP/3 的核心改变换掉 TCPHTTP/3 不再使用 TCP改用QUIC基于 UDP。二、QUIC 的核心优势三、各版本对比对比项HTTP/1.1HTTP/2HTTP/3传输层TCPTCPUDPQUIC多路复用❌✅✅队头阻塞HTTP 层面TCP 层面无头部压缩无HPACKQPACK服务器推送❌✅✅连接迁移❌❌✅首次连接3-RTT3-RTT1-RTT再次连接3-RTT3-RTT0-RTT第五部分面试题1. QHTTP/1.1 和 HTTP/2 的主要区别AHTTP/2 支持多路复用一个连接并发多个请求、头部压缩HPACK、服务器推送。HTTP/1.1 的管道化存在队头阻塞HTTP/2 通过二进制分帧和流解决了这个问题。2. QHTTP/2 和 HTTP/3 的区别AHTTP/3 把底层从 TCP 换成了 QUICUDP。QUIC 在用户态实现内置 TLS 1.3彻底解决了 TCP 层面的队头阻塞支持 0-RTT 连接和连接迁移。3. QHTTP/1.1 的队头阻塞和 HTTP/2 的队头阻塞有什么不同AHTTP/1.1 的队头阻塞在 HTTP 层面响应必须按顺序返回HTTP/2 的队头阻塞在 TCP 层面一个 TCP 包丢了所有流都要等重传。HTTP/3 彻底消除了队头阻塞。4. Q为什么 HTTP/3 基于 UDP 而不是 TCPATCP 在内核中实现修改困难二十多年才升级一次。QUIC 在用户态实现可以快速迭代。QUIC 在 UDP 之上实现了可靠传输、拥塞控制、TLS 加密而且彻底解决了 TCP 的队头阻塞和连接迁移问题。总结一、版本演进核心HTTP/1.0 → HTTP/1.1长连接 管道化HTTP/1.1 → HTTP/2多路复用 头部压缩HTTP/2 → HTTP/3QUICUDP替代 TCP彻底解决队头阻塞二、一句话记忆HTTP/1.1 长连接但队头阻塞HTTP/2 多路复用解决 HTTP 层面阻塞但仍有 TCP 层面阻塞HTTP/3 用 QUIC 换掉 TCP 彻底消除队头阻塞并支持 0-RTT 和连接迁移。

相关新闻