# http2.0

# HTTP1.1 存在问题

  1. HTTP1.1 的 HTTP 队头堵塞:一个 TCP 连接只能通过一个 HTTP 请求,万一堵塞的话,影响到后续请求
  2. 虽然浏览器对同一个域名支持 6 个 TCP 连接,但是每次 TCP 连接成本很高,存在启动慢的问题
  3. 头部太大
  4. 只能主动请求,不能被动接收

解决方式:

  1. 多路复用
  2. 二进制分帧
  3. 头部压缩
  4. 服务器推送

# 多路复用

同一时刻一个 TCP 连接,发送了多个 HTTP 请求

一个 TCP 连接上可以有任意数量的流

  • 流(Stream):已建立的 TCP 连接上的双向字节流,可以承载一个或多个消息
  • 消息(Message):一个完整的 HTTP 请求或响应,由一个或多个帧组成。特定消息的帧在同一个流上发送,这意味着一个 HTTP 请求或响应只能在一个流上发送。
  • 帧(Frame):通信的基本单位

# 二进制分帧

一条 HTTP 响应,划分成了两个帧来传输,并且采用二进制来编码。

# 头部压缩

静态字典

HTTP/2 针对头部字段,也采用了对应的压缩算法——HPACK,对请求头进行压缩 传递索引

# HTTP 队头阻塞

当 http 开启长连接时,共用一个 TCP 连接,同一时刻只能处理一个请求

解决:

  • 二进制分帧 一个 HTTP/2 连接上可以同时发多个帧
  • 流 二进制帧的双向传输的序列 Stream ID 排序
  • 多路复用

# 服务器推送

# 开启 HTTP2.0

Nginx 版本支持 直接开启 node (opens new window)

# 参考文章

你了解 HTTP2.0 吗? (opens new window)