HTTP KeepAlive连接由服务器关闭,但客户端同时发送了请求

时间:2016-07-31 17:49:31

标签: apache http tomcat proxy

方案如下:

  • 有一个http反向代理,它与应用程序服务器有一个持久连接池。它已收到客户端的请求,并在检查连接已打开后向后端发出相同的请求
  • 同时,服务器在收到请求之前关闭连接,代理失败并从后端读取错误。
  • 向客户端发送错误。

如何处理这种竞争条件:   - 所有连接关闭应该由代理启动,而不是由后端服务器启动?   - 代理应该在因连接关闭而无法发送时重试请求吗?

1 个答案:

答案 0 :(得分:1)

代理只是通过流量。如果服务器已关闭连接,则代理也应立即关闭它,即使有待处理的请求也是如此。 但是,从客户端站点,所描述的情况看起来像服务器还没有返回请求的任何数据。这应该通过“保持活着”来防止。握手。

在HTTP协议中标题"连接:"用于这种情况。客户包括"连接:Keep-Alive"如果他想在处理请求后保持TCP会话打开(这样就可以在同一个TCP会话中发送下一个HTTP请求)。服务器仍然可以回复"连接:关闭"标题,这意味着无论如何都会关闭TCP会话。