NGINX 启用 HTTP/2
简介 HTTP/2(RFC 7540,2015 年发布)是自 1999 年 HTTP/1.1 以来的第一次重大升级,目标是在不改变应用语义的前提下,改善延迟、并发和网络效率。浏览器端基本只在 TLS 上启用(h2),明文 h2c 仅用于内部服务间通信。 h2:HTTP/2 over TLS(最常见,浏览器只支持这一种) h2c:HTTP/2 over TCP(无加密) 设计背景 移动端和富媒体时代请求量激增,HTTP/1.1 的队头阻塞、多个 TCP 连接并行带来的慢启动 / 拥塞竞争成为瓶颈。 谷歌的 SPDY 原型验证了「单连接、多路复用、压缩头部」的思路;IETF 在 SPDY 3.1 基础上标准化为 HTTP/2。 核心特性 特性 作用 二进制分帧(Binary Framing) 把 HTTP 报文拆成小型 Frame,机器易解析、可并行 多路复用(Multiplexing) 多个请求 / 响应共享一个 TCP 连接,互不阻塞 流与优先级(Stream & Priority) 每个请求是双向 Stream,可指定权重与依赖 头部压缩(HPACK) 静态 Huffman + 动态表,大幅减少重复 Header 字节 服务器推送(Server Push) Chrome 106(2022-09)已移除,由 103 Early Hints 取代 流量控制 端到端窗口,避免单个大文件占满带宽 多路复用解决的是应用层队头阻塞 —— TCP 层的队头阻塞依然存在(任意一个包丢失,连接上所有 stream 全停),这正是 HTTP/3 改走 QUIC over UDP 要解决的问题。 ...