2022-01-25 09:39:50
HTTP/2 多路复用通过在一个 TCP 连接中并行传输多个请求和响应,解决了 HTTP/1.x 的队头阻塞问题,并改变了前端性能优化的核心策略。 以下从技术原理、对比 HTTP/1.x、浏览器限制及对前端开发的影响展开分析:
一、HTTP/1.x 的队头阻塞问题
双向传输:每个 HTTP 请求/响应被拆分为一个流,流可并行传输。
乱序处理:帧可乱序发送,接收方根据流标识符重组数据,实现真正的并行通信。

HTTP/1.x:依赖多条单车道小路(TCP 连接),每条路一次仅能通行一辆车(请求)。
HTTP/2:通过一条多车道高速公路(单个 TCP 连接)传输所有数据,流为独立车道。
HTTP/1.x:若某请求阻塞,同连接后续请求均需等待。
HTTP/2:阻塞仅影响单个流,其他流可继续传输。
服务器资源保护:每个流需分配内存和计算资源,无限制可能导致服务器崩溃。
浏览器资源保护:管理过多流会占用大量内存和 CPU,引发卡顿。
流量控制与备档拥塞避免:限制流数量可防止 TCP 连接数据量过大导致传输减速。
实际需求:多数页面并发请求数(通常 100-200 个)远低于限制上限。
HTTP/1.x:限制同一域名的最大 TCP 连接数(6-8 个)。
HTTP/2:限制单个 TCP 连接中的并发流数,解决应用层队头阻塞。
减少请求数不再是首要任务:HTTP/1.x 时代通过精灵图、文件合并减少请求,而 HTTP/2 中请求开销降低,可拆分资源为更小模块,实现按需加载。
域名分片失效:HTTP/2 无需通过多域名分散资源,域名分片会增加 DNS 解析和连接开销。
HTTP/2 Push 的应用:服务器可主动推送 CSS、JS 等资源,减少浏览器二次请求延迟。
合理拆分资源:将 CSS/JS 拆分为小模块,利用多路复用并行加载。
优化资源大小:压缩图片、精简代码,减少单个资源传输时间。
HTTP/2 多路复用通过二进制分帧和流机制,在一个 TCP 连接中实现并行通信,彻底解决了 HTTP/1.x 的队头阻塞问题。前端开发者需从弊信“减少请求数”转向“按需加载和资源拆分”,结合 HTTP/2 Push 等特性,构建高性能 Web 应用。