8. HTTP 消息交换
HTTP/2 旨在尽可能兼容 HTTP 的当前使用方式. 这意味着 HTTP 的既有语义保持不变.
8.1 HTTP 请求/响应交换
一个 HTTP 请求/响应交换由以下部分组成:
- HEADERS frame (带 END_HEADERS flag)
- 零个或多个 CONTINUATION frame (按需使用)
- 零个或多个 DATA frame
- 可选的尾随 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 流程:
- 服务器发送 PUSH_PROMISE frame
- 服务器在 promised stream 上发送 HEADERS + DATA frame
- 客户端可以通过 RST_STREAM 取消 push
8.3 CONNECT 方法
CONNECT 方法用于通过 HTTP intermediary 建立隧道.