http2

最后更新于:

http2是什么?

HTTP/2(超文本传输协议第二版,简称h2,非加密连接为h2c)是HTTP协议的第二个主要版本,由IETF于2015年5月正式标准化(RFC 7540),基于Google的SPDY协议发展而来,旨在解决HTTP/1.1的性能瓶颈,大幅提升Web传输效率和用户体验。


一、核心定位:兼容语义,重构传输

HTTP/2完全保留HTTP/1.1的核心语义(请求方法、状态码、头部字段、Cookie等),仅在应用层与传输层之间增加了二进制分帧层,彻底重构了数据传输机制,解决了HTTP/1.x的三大核心痛点:

  • 队头阻塞(Head-of-Line Blocking)
  • 头部冗余大,带宽浪费
  • 连接数限制(浏览器同域仅6-8个并行TCP连接)

二、五大核心特性

1. 二进制分帧(Binary Framing)

HTTP/2将所有传输内容拆分为固定格式的二进制帧(每个帧9字节头部+数据载荷),而非HTTP/1.x的文本格式:

  • 帧头部包含:类型、流ID、标志位、长度等关键信息
  • 帧类型:HEADERS(头部)、DATA(数据)、PRIORITY(优先级)、PUSH_PROMISE(服务器推送)等
  • 优势:解析更快、错误率更低、传输更高效,为多路复用奠定基础

2. 多路复用(Multiplexing)

HTTP/2最核心的性能突破:允许在单个TCP连接上并行交错传输多个请求/响应,每个请求分配独立的流ID,帧可乱序发送,接收端通过流ID重组:

  • 彻底解决HTTP层队头阻塞:一个请求阻塞不影响其他请求
  • 减少TCP连接数:降低握手开销和资源消耗
  • 类比:HTTP/1.1是单车道隧道,HTTP/2是多车道高速公路

3. 头部压缩(HPACK)

使用HPACK算法对HTTP头部进行双向压缩,解决HTTP/1.x头部冗余大的问题:

  • 建立静态字典(常见头部如:method, :path)和动态字典(传输过程中学习新增头部)
  • 对重复头部只传输索引,大幅减少头部数据量(尤其适合移动端和频繁请求场景)
  • 实验数据:头部压缩率可达60%-90%,显著降低延迟

4. 服务器推送(Server Push)

服务器可主动推送客户端可能需要的资源(如CSS、JS、图片),无需等待客户端请求:

  • 推送资源通过PUSH_PROMISE帧通知客户端,客户端可选择接收或拒绝
  • 优势:减少请求次数,消除额外网络延迟,尤其适合首屏加载
  • 注意:推送资源需缓存,避免重复传输

5. 流优先级与流量控制

  • 流优先级:客户端可为请求设置优先级(1-256级),服务器根据优先级调度帧传输,确保关键资源(如HTML)优先加载
  • 流量控制:基于滑动窗口机制,客户端和服务器可独立控制对方的发送速率,防止接收端被压垮

三、其他重要特性

  • TLS加密普及:主流浏览器(Chrome、Firefox等)仅支持基于TLS 1.2+的h2协议,非加密的h2c协议支持有限
  • 首部阻塞缓解:HTTP/2解决了HTTP层队头阻塞,但TCP层队头阻塞依然存在(这也是HTTP/3基于QUIC协议的原因)
  • 向后兼容:HTTP/2可透明降级到HTTP/1.1,确保旧客户端正常访问

四、应用现状与实践

  • 兼容性:全球主流浏览器(Chrome 40+、Firefox 36+、Safari 9+)和服务器(Nginx 1.9.5+、Apache 2.4.17+)均已支持HTTP/2
  • 部署建议
    1. 配置HTTPS证书(Let’s Encrypt免费证书),启用h2协议
    2. 优化服务器推送策略,避免过度推送
    3. 合理设置资源优先级,提升用户体验
    4. 结合HTTP缓存策略,最大化性能收益

五、HTTP/2 vs HTTP/1.1 核心对比

特性HTTP/1.1HTTP/2
协议格式文本二进制帧
连接模型多连接并行(6-8个)单连接多路复用
队头阻塞严重(HTTP层)无(HTTP层)
头部压缩HPACK算法
服务器推送支持
流优先级支持(1-256级)

总结

HTTP/2是Web性能的一次革命性升级,通过二进制分帧、多路复用、头部压缩等核心技术,在不改变HTTP核心语义的前提下,显著提升了网络传输效率,降低了延迟,改善了用户体验。如今,HTTP/2已成为现代网站的标配,而HTTP/3(基于QUIC协议)则在HTTP/2基础上进一步解决了TCP层队头阻塞问题,正在快速普及中。

需要我把HTTP/2的关键特性整理成一份可用于面试或技术分享的速记清单吗?

推荐使用微信支付
微信支付二维码
推荐使用支付宝
支付宝二维码
最新文章

文档导航