[toc]
环境
研究http2,首先我们要有一个http2的客户端,一般情况下curl不会支持http2,所以我们要重新安装我们的curl,为了使curl支持http2,我们需要先安装nghttp2(严重怀疑和nginx有什么关系吗)依赖库
curl安装nghttp2依赖之后,只支持h2或者h2c通过http/1.1升级到http2的形式,但是nginx支持的h2c是direct h2c,即没有前置的http/1.1协议升级,直接http2通信,所以要测试h2c direct直接用的nghttp2提供的工具nghttp
协议
流
帧
帧是http2传输过程中的最基本单元,一个数据帧的格式如下1
2
3
4
5
6
7
8
9 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| R | Length (14) | Type (8) | Flags (8) |
+-+-+-----------+---------------+-------------------------------+
|R| Stream Identifier (31) |
+=+=============================================================+
| Frame Payload (0...) ...
+---------------------------------------------------------------+
R: 保留字 2位
Length: 帧主体长度,不包括第一行的帧头
Type: 帧类型
flags: 特定帧类型的标示位
R: 保留字
Sid: 流id,0号表示当前帧关联整个tcp流
Frame Payload:
DATA帧
1 | 0 1 2 3 |