6. 帧定义 (Frame Definitions)
本规范定义了多种帧类型,每种由唯一的8位类型代码标识。每种帧类型为建立和管理整个连接或单个流服务不同的目的。
特定帧类型的传输可以改变连接的状态。如果端点无法维护连接状态的一致视图,则无法在连接内成功通信。因此,重要的是端点对于会修改状态的帧类型或端点不理解的帧类型如何影响状态具有共同的理解。
6.1 DATA帧 (DATA Frames)
DATA帧(类型=0x0)传送与流关联的任意、可变长度的八位字节序列。一个或多个DATA帧用于承载HTTP请求或响应有效负载。
6.2 HEADERS帧 (HEADERS Frames)
HEADERS帧(类型=0x1)用于打开流(第5.1节),并且还携带头部块片段。HEADERS帧可以在"idle"、"reserved (local)"、"open"或"half-closed (remote)"状态的流上发送。
6.3 PRIORITY帧 (PRIORITY Frames)
PRIORITY帧(类型=0x2)指定流的发送方建议的优先级(第5.3节)。它可以在任何流状态下发送,包括空闲或关闭的流。
6.4 RST_STREAM帧 (RST_STREAM Frames)
RST_STREAM帧(类型=0x3)允许立即终止流。发送RST_STREAM以请求取消流或指示已发生错误情况。
6.5 SETTINGS帧 (SETTINGS Frames)
SETTINGS帧(类型=0x4)传达影响端点如何通信的配置参数,例如对对等方行为的偏好和约束的设置。
关键SETTINGS参数:
- SETTINGS_HEADER_TABLE_SIZE (0x1): 用于解码头部块的头部压缩表的最大大小
- SETTINGS_ENABLE_PUSH (0x2): 启用(1)或禁用(0)服务器推送
- SETTINGS_MAX_CONCURRENT_STREAMS (0x3): 发送方允许的最大并发流数
- SETTINGS_INITIAL_WINDOW_SIZE (0x4): 发送方的流级流量控制的初始窗口大小
- SETTINGS_MAX_FRAME_SIZE (0x5): 发送方愿意接收的最大帧有效负载大小
- SETTINGS_MAX_HEADER_LIST_SIZE (0x6): 发送方通告的它准备接受的头部列表的最大大小
6.6 PUSH_PROMISE帧 (PUSH_PROMISE Frames)
PUSH_PROMISE帧(类型=0x5)用于在发送方打算发起的流之前通知对等端点。PUSH_PROMISE帧包括端点计划创建的流的无符号31位标识符以及为流提供附加上下文的一组头部。
6.7 PING帧 (PING Frames)
PING帧(类型=0x6)是从发送方测量最小往返时间的机制,以及确定空闲连接是否仍然有效的机制。
6.8 GOAWAY帧 (GOAWAY Frames)
GOAWAY帧(类型=0x7)用于启动连接关闭或发出严重错误情况的信号。GOAWAY允许端点优雅地停止接受新流,同时仍然完成先前建立的流的处理。
6.9 WINDOW_UPDATE帧 (WINDOW_UPDATE Frames)
WINDOW_UPDATE帧(类型=0x8)用于实现流量控制;参见第5.2节详细概述。
6.10 CONTINUATION帧 (CONTINUATION Frames)
CONTINUATION帧(类型=0x9)用于继续头部块片段序列(第4.3节)。只要同一流上的前一帧是没有设置END_HEADERS标志的HEADERS、PUSH_PROMISE或CONTINUATION帧,就可以发送任意数量的CONTINUATION帧。
上一章: 5. 流和多路复用 (Streams and Multiplexing)
下一章: 7. 错误码 (Error Codes)