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

然而,2012 年夏天,出现了针对 TLS 和 SPDY 压缩算法的“CRIME”安全攻击,
                它可以利用首部压缩拦截会话。于是,zlib 压缩算法被撤销,取而代之的是前面
                介绍的新索引表算法。索引表算法没有类似的安全问题,但可以实现相差无几的
                性能提升。
                要全面了解 HTTP 2.0 压缩算法,请看这里:http://tools.ietf.org/html/draft-ietf-httpbis-
                header-compression。



               12.3.9 有效的HTTP 2.0升级与发现

               向 HTTP  2.0 的迁移不可能一蹴而就。数百万台服务器必须升级才能使用新的二进
               制分帧,还有数十亿客户端必须更新浏览器和网络库。

               好消息是,大多数现代浏览器都内置有高效的后台升级机制,因而对相当大一部分
               既有用户来说,这些浏览器能很快支持 HTTP  2.0,又不会带来太多干扰。尽管如
               此,还是有一部分用户只能使用旧版本的浏览器,而服务器和中间设备也必须升级
               支持 HTTP 2.0,这需要一个比较长的时期,而且是一个费力、费钱的过程。

               HTTP  1.x 至少还会存在十年以上,大多数服务器和客户端在此期间必须同时支持
               1.x 和 2.0 标准。于是,支持 HTTP  2.0 的客户端在发起新请求之前,必须能发现服
               务器及所有中间设备是否支持 HTTP 2.0 协议。有三种可能的情况:

               •   通过 TLS 和 ALPN 发起新的 HTTPS 连接;
               •   根据之前的信息发起新的 HTTP 连接;
               •   没有之前的信息而发起新的 HTTP 连接。

               HTTPS 协商过程中有一个环节会使用 ALPN(Application Layer Protocol Negotiation)
               发现和协商 HTTP 2.0 的支持情况 [ 参见 4.2.1 节“应用层协议协商(ALPN)”]。减
               少网络延迟是 HTTP  2.0 的关键条件,因此在建立 HTTPS 连接时一定会用到 ALPN
               协商。

               通过常规非加密信道建立 HTTP  2.0 连接需要多做一点工作。因为 HTTP  1.0 和
               HTTP 2.0 都使用同一个端口(80),又没有服务器是否支持 HTTP 2.0 的其他任何信
               息,此时客户端只能使用 HTTP Upgrade 机制通过协调确定适当的协议:

                   GET /page HTTP/1.1
                   Host: server.example.com
                   Connection: Upgrade, HTTP2-Settings
                   Upgrade: HTTP/2.0 ➊
                   HTTP2-Settings: (SETTINGS payload) ➋



               194   |   第 12 章
   204   205   206   207   208   209   210   211   212   213   214