- Published on
HTTP
- Authors

- Name
- Li WenKang
- https://x.com/liwenkang_space
HTTP是超文本传输协议,HTTP1.1,HTTP2,HTTP3分别代表三个版本,可用于前后端数据通信。
升级后,优化了哪些功能?解决了哪些问题?
HTTP1.1 时期,默认复用TCP连接(持久连接),请求必须按照顺序响应,会造成队头阻塞。浏览器最多支持 6 个 TCP 连接。重复传输了头部字段,无优先级控制。
从 HTTP1.1,升级到 HTTP 2 后,通过二进制分帧和多路复用的能力,解决应用层阻塞问题(TCP 仍阻塞),可以并行处理的请求数量大大增加。支持了头部压缩(HPACK)算法减少体积和服务器推送功能。底层仍依赖 TCP,丢包时所有流会受阻塞(原因是HTTP2 的多路复用仍依赖 TCP按序传输的特性,单个丢包会导致整个连接等待重传)
从 HTTP2 升级到 HTTP3,使用了一种名为 QUIC 的协议(基于 UDP 而不是TCP),每个流独立传输,彻底解决队头阻塞问题,使用了新的头部压缩(QPACK)算法,0-RTT握手(首次连接也只需要 1 次握手),内置 TLS 加密,支持断网续传
如何升级?
- http2 需后端服务器配置新协议(Nginx中配置listen 443 ssl http2,并启用TLS 1.2+)
- http3 需开启 QUIC 支持(Nginx 1.25+配置listen 443 quic,添加Alt-Svc头,实现与HTTP/2的优雅降级) ,前端需在升级后验证兼容性,资源加载顺序是否有影响(可以减少资源合并,比如之前合并的大的 css 文件,可以考虑做拆分,提高效率),升级后可以通过查看控制台网络面板的 protocol 列查看协议
最佳实践?
至少升级到 HTTP2,且开启 https 加密,后期转向 HTTP3(尤其适合音视频游戏-降低延迟,移动网络环境-切换不断线)