【发布时间】:2016-01-04 03:43:44
【问题描述】:
我正在尝试诊断位于某些负载平衡器和代理之后的 Web 服务。在负载下,其中一台服务器开始返回 HTTP 504 错误,这表明网关超时。有了这个背景,这是我的问题:
当代理向目的服务器发出请求,目的服务器收到请求但没有及时响应(从而超过超时),导致504,当目的服务器 最终回应?它是否知道请求者不再对响应感兴趣?它会在不知道网关已经将 HTTP 错误响应发送回客户端的情况下愉快地发送响应吗?任何见解将不胜感激。
【问题讨论】:
我正在尝试诊断位于某些负载平衡器和代理之后的 Web 服务。在负载下,其中一台服务器开始返回 HTTP 504 错误,这表明网关超时。有了这个背景,这是我的问题:
当代理向目的服务器发出请求,目的服务器收到请求但没有及时响应(从而超过超时),导致504,当目的服务器 最终回应?它是否知道请求者不再对响应感兴趣?它会在不知道网关已经将 HTTP 错误响应发送回客户端的情况下愉快地发送响应吗?任何见解将不胜感激。
【问题讨论】:
它依赖于实现,但是任何符合RFC 2616 8.1.2.1 节的代理都应该在 504 上包含 Connection: close 并关闭与客户端的连接,这样它就不能再与从失效的服务器连接,也应该关闭。在负载下,在这种情况下可能会出现竞争条件,因此您可能正在查看代理中的错误。
如果客户端想要进一步请求,它将创建一个到代理的新连接,这将导致一个到后端的新连接。
【讨论】: