Page 127 - HTTP权威指南
P. 127

4.5.6 Keep-Alive和哑代理

               我 们 来 仔 细 看 看 keep-alive 和 哑 代 理 中 一 些 比 较 微 妙 的 问 题。Web 客 户 端 的
               Connection:  Keep-Alive 首部应该只会对这条离开客户端的 TCP 链路产生影响。
               这就是将其称作“连接”首部的原因。如果客户端正在与一台 Web 服务器对话,客
               户端可以发送一个 Connection: Keep-Alive 首部来告知服务器它希望保持连接
               的活跃状态。如果服务器支持 keep-alive,就回送一个 Connection: Keep-Alive
               首部,否则就不回送。


               1. Connection首部和盲中继
               问题出在代理上——尤其是那些不理解 Connection 首部,而且不知道在沿着转
               发链路将其发送出去之前,应该将该首部删除的代理。很多老的或简单的代理都
               是盲中继(blind  relay),它们只是将字节从一个连接转发到另一个连接中去,不对
               Connection 首部进行特殊的处理。

               假设有一个 Web 客户端正通过一个作为盲中继使用的哑代理与 Web 服务器进行对
               话。图 4-15 显示的就是这种情形。



                                                                   (b)服务器认为对方请求
                                                                        保持连接活跃,因此处理
                                                                        完连接后不会将其关闭。
                   (a) Connection: Keep-Alive  (b) Connection: Keep-Alive



                                                  (c) Connection:
                         (d) Connection: Keep-Alive哑代理   Keep-Alive
                客户端                                            服务器

                                                (c)代理会忽略连接上所有
                           下一条请求                     新的请求,等待连接关闭。
                  (e)由于代理不会对其进
                       行处理,所以客户端在keep-alive
                       连接上发送的第二条请求会被挂起。

               图 4-15 keep-alive 无法与不支持 Connection 首部的代理进行互操作

               这幅图中发生的情况如下所示。

               (1)   在图 4-15a 中,Web 客户端向代理发送了一条报文,其中包含了 Connection:
                  Keep-Alive 首部,如果可能的话请求建立一条 keep-alive 连接。客户端等待响
          94      应,以确定对方是否认可它对 keep-alive 信道的请求。



               100   |   第 4 章
   122   123   124   125   126   127   128   129   130   131   132