跳到主要内容

8. HTTP 消息交换

HTTP/2 旨在尽可能兼容 HTTP 的当前使用方式. 这意味着 HTTP 的既有语义保持不变.

8.1 HTTP 请求/响应交换

一个 HTTP 请求/响应交换由以下部分组成:

  1. HEADERS frame (带 END_HEADERS flag)
  2. 零个或多个 CONTINUATION frame (按需使用)
  3. 零个或多个 DATA frame
  4. 可选的尾随 HEADERS frame

HTTP 请求

一个完整的 HTTP 请求由以下部分组成:

  • 一个带 END_HEADERS flag 的 HEADERS frame
  • 随后是零个或多个 DATA frame
  • 可选地再跟随一个用于 trailers 的 HEADERS frame

HTTP 响应

一个 HTTP 响应由以下部分组成:

  • 一个带 END_HEADERS flag 的 HEADERS frame
  • 随后是零个或多个 DATA frame
  • 可选地再跟随一个用于 trailers 的 HEADERS frame

8.2 Server Push

HTTP/2 允许服务器主动向客户端发送响应, 这些响应与此前由客户端发起的请求相关联.

Server Push 流程:

  1. 服务器发送 PUSH_PROMISE frame
  2. 服务器在 promised stream 上发送 HEADERS + DATA frame
  3. 客户端可以通过 RST_STREAM 取消 push

8.3 CONNECT 方法

CONNECT 方法用于通过 HTTP intermediary 建立隧道.