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

•   一个慢响应就会阻塞所有后续请求;
                 •   并行处理请求时,服务器必须缓冲管道中的响应,从而占用服务器资源,如果有
                   个响应非常大,则很容易形成服务器的受攻击面;
                 •   响应失败可能终止 TCP 连接,从页强迫客户端重新发送对所有后续资源的请求,
                   导致重复处理;
                 •   由于可能存在中间代理,因此检测管道兼容性,确保可靠性很重要;
                 •   如果中间代理不支持管道,那它可能会中断连接,也可能会把所有请求串联起来。

                 由 于 存 在 这 些 以 及 其 他 类 似 的 问 题, 而 HTTP  1.1 标 准 中 也 未 对 此 做 出 说 明,
                 HTTP 管道技术的应用非常有限,虽然其优点毋庸置疑。今天,一些支持管道的浏
                 览器,通常都将其作为一个高级配置选项,但大多数浏览器都会禁用它。换句话
                 说,如果浏览器是 Web 应用的主要交付工具,那还是很难指望通过 HTTP 管道来
                 提升性能。


                                      在浏览器外部使用 HTTP 管道

                   在完全忽略 HTTP 管道的优点之前,有必要提醒一下大家,如果你对客户端和服
                   务器拥有完全控制的权限,那么还是可以使用它的,并且效果非常好。事实上,
                   苹果 iTunes 那个案例就说明了问题,参见本章开头的“让 iTunes 用户感受到 3 倍
                   以上的性能增强”。如此巨大的性能提升,就来自启用持久 HTTP 连接,以及在服
                   务器和 iTunes 客户端内启用 HTTP 管道。
                   要在你自己的应用中启用管道,要注意如下事项:
                   •   确保 HTTP 客户端支持管道;
                   •   确保 HTTP 服务器支持管道;
                   •   应用必须处理中断的连接并恢复;
                   •   应用必须处理中断请求的幂等问题;
                   •   应用必须保护自身不受出问题的代理的影响。

                   实践中部署 HTTP 管道的最佳途径,就是在客户端和服务器间使用安全通道
                  (HTTPS)。这样,就能可靠地避免那些不理解或不支持管道的中间代理的干扰。




                 11.3 使用多个TCP连接

                 由于 HTTP  1.x 不支持多路复用,浏览器可以不假思索地在客户端排队所有 HTTP
                 请求,然后通过一个持久连接,一个接一个地发送这些请求。然而,这种方式在实
                 践中太慢。实际上,浏览器开发商没有别的办法,只能允许我们并行打开多个 TCP


                                                                              HTTP 1.x   |   169
   179   180   181   182   183   184   185   186   187   188   189