apache - HTTP KeepAlive 连接被服务器关闭但客户端同时发送了一个请求

标签 apache http tomcat proxy

场景如下:

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

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

最佳答案

代理只是通过流量。如果服务器关闭了连接,proxy 也应该立即关闭它,即使有请求未决。 但是,从客户端站点所​​描述的情况来看,服务器似乎没有为请求返回任何数据。这应该通过“保持事件”握手来防止。

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

关于apache - HTTP KeepAlive 连接被服务器关闭但客户端同时发送了一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38686828/

相关文章:

apache - 在 easyphp 上安装 openSSL 以开发 facebook 应用程序

apache - @font-face 字体只适用于它们自己的域

apache - 谷歌云平台计算引擎 SSL 证书

node.js - Angular 2 SimpleChanges 对象在第一次 npm 启动时抛出错误

php - 如何使用数据库中的一些数据对 python http 请求进行 php 服务器脚本响应

Apache/Tomcat/mod_jk 当你使用 Webjars 时......可能吗?

android - 超时异常(从 Android 向 PHP 页面发送数据)

spring - 配置 Netty 并将其嵌入到 Spring-Tomcat 环境中

java - 如何在 Tomcat 上使用 MongoDB 实现 Java EE 容器安全

java - Spring 3.2 @Configurable 和@Autowire 无法注入(inject)任何东西