HTTP/2 二进制协议

HTTP/2 为 HTTP 语义提供了优化的传输。HTTP/2 支持 HTTP/1.1 的所有核心功能,但旨在以多种方式提高效率。

什么是 HTTP/2

它源自早期的实验性 SPDY 协议,最初由 Google 开发。HTTP/2 由Internet 工程任务组的超文本传输​​协议工作组 httpbis(其中 bis 表示“第二”)开发。HTTP/2 规范于 2015 年 5 月作为RFC 7540发布。

HTTP/2 是二进制的,使框架更容易。确定帧的开始和结束是 HTTP 1.1 中真正复杂的事情之一,实际上,在一般的基于文本的协议中也是如此。通过摆脱可选的空白和不同的方式来编写相同的东西,实现变得更简单。

HTTP/2 处理:
  • 创建一个协商机制,允许客户端和服务器选择使用 HTTP 1.1、2.0 或其他可能的非 HTTP 协议。
  • 保持与 HTTP 1.1 的高级兼容性(例如与方法、状态代码、URI 和大多数标头字段)。
  • 通过考虑以下因素来减少延迟以提高 Web 浏览器中的页面加载速度:
    1. HTTP 标头的数据压缩
    2. HTTP/2 服务器推送
    3. 请求流水线
    4. 修复 HTTP 1.x 中的行头阻塞问题
    5. 通过单个 TCP 连接多路复用多个请求
  • 支持常见的现有 HTTP 用例,例如桌面 Web 浏览器、移动 Web 浏览器、Web API、各种规模的 Web 服务器、代理服务器、反向代理服务器、防火墙和内容交付网络。

单个 HTTP/2 连接可以包含多个同时打开的流,其中任一端点交错来自多个流的帧。流可以单方面建立和使用,也可以由客户端或服务器共享,并且可以由任一端点关闭。多路复用流意味着来自多个流的包在同一连接上混合。

HTTP/2 减少了必要的网络往返次数,并且通过多路复用和快速丢弃不需要的流,完全避免了头部阻塞的困境。

HTTP/2 是为 HTTP URI(即没有加密)和 HTTPS URI(通过 TLS 使用 ALPN 扩展,其中需要 TLS 1.2 或更新版本)定义的。