Http2简单解析-帧格式(三)
Data帧
DATA类型的帧包含的字节长度不定。换言之,这些帧包含了请求和发送的对象。如果超出帧容许的最大长度,资源数据会被切分到一个或者多个帧里面去。Data帧结构


HEADERS帧
HEADER帧用以创建流,并向另一端发送消息首部。



PRIORITY帧
发送PRIORITY帧是为了标识流的优先级。它可以多次发送,后面指定的优先级会覆盖之前的。

RST_STREAM帧
如果要终止一个流,可以将RST_STREAM加在该流的两端。这通常是为了处理某种错误。帧里的Error Code(错误码)字段用来标注重置的原因。

SETTINGS帧
SETTINGS帧包含了若干有序的键/值对2。键/值对的数量等于帧长度除以单组设置的长度。动态表的最大字节数由 SETTINGS_HEADER_TABLE_SIZE 来控制

PUSH_PROMISE帧
服务端发送PUSH_PROMISE帧来告诉客户端,它将发送一份客户端尚未明确请求的资源。PUSH_PROMISE帧实际上是对客户端发送的HEADERS帧的补充。


PING帧
PING帧用以计算两端之间的往返时间。此帧有一个标识位ACK(0x1)。如果一端收到一个不带ACK的PING帧,它就必须返回一个PING帧,这个帧必须设置ACK标识,并且包含同样的数据内容(Opaque Data)。需要注意的是,PING帧不属于任何一个流(它们是连接层的),因此它们的流ID要设置为0x0。

GOAWAY帧
GOAWAY帧用以礼貌地关闭连接。这是连接层的帧,并且发送时流ID要设置为0x0。通过发送GOAWAY帧,当前端可以清晰地告诉接收端,它接收到了什么、未接收到什么,以及什么原因(如果有的话)导致了GOAWAY。并且Last Stream ID(最后一个流ID)会被设置为曾经处理过的最大的流ID。如果没有错误发生,而当前端要断开连接(浏览器标签页关闭以及连接超时等情况),那就发NO_ERROR(0x0)这个错误码,并且Last Stream ID被设置为231-1。


WINDOW_UPDATE帧
WINDOW_UPDATE帧用来做流量控制——发送方发送WINDOW_UPDATE帧,告诉接收方自己此时期望接收多少字节。流量控制可以应用到单个的流,也可以应用到连接承载的所有流(流ID为0x0)。需要注意的是,在单个流上指定的WINDOW_UPDATE帧也会作用于连接层的流量控制。

CONTINUATION帧
CONTINUATION帧包含之前的HEADERS、PUSH_PROMISE,或者CONTINUATION帧的附加首部。


