每天一点小知识——HTTP/2

299 阅读2分钟

HTTP/2

二进制分帧层
概念
  1. 数据流: 已建立的连接内的双向字节流,可以承载一条或多条消息。
  2. 消息: 与逻辑请求或响应消息对应的完整的一系列帧。
  3. 帧: HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
关系
  1. 所有通信都在一个 TCP 连接上完成,此连接可以承载任意数量的双向数据流。
  2. 每个数据流都有一个唯一的标识符和可选的优先级信息,用于承载双向消息。
  3. 每条消息都是一条逻辑 HTTP 消息(例如请求或响应),包含一个或多个帧。 4 . 帧是最小的通信单位,承载着特定类型的数据,例如 HTTP 标头、消息负载等等。 来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。
数据流优先级
  1. 通过控制 CPU、内存和带宽等资源的分配,控制各个传输的优先级,但不保证请求的处理和传输的顺序和优先级有关
多路复用和长连接
  1. HTTP/2 连接都是永久的,而且仅需要每个来源一个连接
  2. 客户端和服务器可以将 HTTP 消息分解为互不依赖的帧,然后交错发送,最后再在另一端把它们重新组装起来。
服务器推送
  1. 服务器可以对一个客户端请求发送多个响应,也就是在客户端发送了一次请求给服务器之后,服务器无需等待客户端再次请求就可以主动多次发送消息给客户端
Header压缩

使用 HPACK 压缩格式压缩请求头和响应头数据

  1. 支持通过静态霍夫曼代码对传输的标头字段进行编码,从而减小了各个传输的大小。
  2. 要求客户端和服务器同时维护和更新一个包含之前见过的标头字段的索引列表,此列表随后会用作参考,对之前传输的值进行有效编码。