Page 211 - Web性能权威指南
P. 211

因此,尽管 HTTP 2.0 并不要求使用 TLS,但在实践中,将其部署到现有的大量
                中间设备仍然是最可靠的策略(参见 4.1 节中的“Web 代理、中间设备、TLS 与
                新协议”)。最好的结果,就是除了常规的 Upgrade 工作流,还要在部署 HTTP 2.0
                时,一起部署带 ALPN 协商的 TLS。


               12.4 二进制分帧简介


               HTTP  2.0 的根本改进还是新增的长度前置的二进制分帧层。与 HTTP  1.x 使用换行
               符分隔纯文本不同,二进制分帧层更加简洁,通过代码处理起来更简单也更有效。

               建立了 HTTP  2.0 连接后,客户端与服务器会通过交换帧来通信,帧是基于这个新
               协议通信的最小单位。所有帧都共享一个 8 字节的首部(图 12-6),其中包含帧的
               长度、类型、标志,还有一个保留位和一个 31 位的流标识符。




                                     ׊܈                      ૌ႙              Քኾ
                                                     ୁՔ๎ޙ
                                                    ኡ৫ࢁ


               图 12-6:共有的 8 字节帧首部
               •   16 位的长度前缀意味着一帧大约可以携带 64 KB 数据,不包括 8 字节首部。
               •   8 位的类型字段决定如何解释帧其余部分的内容。
               •   8 位的标志字段允许不同的帧类型定义特定于帧的消息标志。
               •   1 位的保留字段始终置为 0。
               •   31 位的流标识符唯一标识 HTTP 2.0 的流。


                          在调试 HTTP 2.0 通信时,有人会使用自己喜欢的十六进制查看器。其实,
                          Wireshark 及其他类似的工具也有相应的插件,使用很简单,也很人性化。
                          比如,谷歌 Chrome 就支持 chrome://internals#spdy,通过它可以查看
                          通信细节。

               知道了 HTTP  2.0 规定的这个共享的帧首部,就可以自己编写一个简单的解析器,
               通过分析 HTTP  2.0 字节流,根据每个帧的前 8 字节找到帧的类型、标志和长度。
               而且,由于每个帧的长度都是预先定义好的,解析器可以迅速而准确地跳到下一帧
               的开始,这也是相对于 HTTP 1.x 的一个很大的性能提升。




               196   |   第 12 章
   206   207   208   209   210   211   212   213   214   215   216