其中,帧类型可以分为:
DATA:用于传输HTTP消息体
HEADERS:用于传输首部字段
SETTINGS:用于约定客户端和服务端的配置数据。比如设置初识的双向流量控制窗口大小
WINDOW_UPDATE:用于调整个别流或个别连接的流量
PRIORITY:用于指定或重新指定引用资源的优先级
RST_STREAM:用于通知流的非正常终止
PUSH_ PROMISE:服务端推送许可
PING:用于计算往返时间,执行“ 活性” 检活
GOAWAY:用于通知对端停止在当前连接中创建流
标志位,用于不同的帧类型定义特定的消息标志。比如DATA帧就可以使用End Stream: true表示该条消息通信完毕;流标识位表示帧所属的流ID;优先值用于HEADERS帧,表示请求优先级;R表示保留。
下面是抓包的一个HEADERS帧:
另外一个两个要说一下的概念:消息和流
消息是指逻辑上的HTTP消息(请求/响应),一系列数据帧组成一个完整的消息,比如一系列DATA帧和一个HEADERS帧组成了请求消息。
流是链接中的一个虚拟信道,可以承载双向消息传输,每个流有唯一证书标识符,为了防止两端流ID冲突,客户端发起的流具有奇数ID,服务端发起的流具有偶数ID。
所有HTTP 2.0通信都在一个TCP链接上完成,这个链接可以承载任意数量的双向数据流Stream。相应地,每个数据流以消息的形式发送,而消息由一个或多个帧组成,这些帧可以乱序发送,然后根据每个帧首部的流标识符重新组装。