【问题标题】:HTTP KeepAlive connection closed by server but client had sent a request in the mean timeHTTP KeepAlive 连接被服务器关闭,但客户端同时发送了一个请求
【发布时间】:2016-07-31 17:49:31
【问题描述】:

场景如下:

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

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

【问题讨论】:

    标签: apache http tomcat proxy


    【解决方案1】:

    代理只是通过流量。如果服务器已经关闭了连接,代理也应该立即关闭它,即使有一个未决的请求。 但是,从客户端站点来看,所描述的情况看起来像服务器没有为请求返回任何数据。这应该通过“keep-alive”握手来防止。

    在 HTTP 协议中,标题“Connection:”用于这种情况。如果客户端希望在处理请求后保持 TCP 会话打开,则包括“连接:保持活动”(因此可以在同一个 TCP 会话中发送下一个 HTTP 请求)。服务器仍然可以回复“Connection: Close”标头,这意味着 TCP 会话无论如何都会关闭。

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2020-07-15
      • 1970-01-01
      • 2020-11-16
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2013-03-07
      相关资源
      最近更新 更多