为什么用户代理在服务器进行TCP重置后重新提交请求?

时间:2013-11-06 15:48:56

标签: http tcp user-agent

我们最近发现了一个问题,即某些用户代理会重复相同的POST请求,而用户实际上并没有两次触发它。

在进一步研究之后,我们注意到这只发生在请求通过我们的负载均衡器并且服务器花了很长时间来处理请求时。数据包捕获会话最终显示负载均衡器在超时5分钟后通过向客户端发送TCP重置来断开连接;但是,客户端会在没有用户干预的情况下自动重新提交请求。

我们在Apache HTTP客户端中观察到Java,Firefox和IE 8的这种行为。(我无法安装其他浏览器进行测试。)这让我觉得这种行为是HTTP标准的一部分,但这并不是很容易谷歌

此外,似乎只有在通过保持活动的TCP连接提交第一个请求时才会发生这种情况。

1 个答案:

答案 0 :(得分:5)

这是HTTP 1.1协议的一部分,用于处理服务器过早关闭的连接。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.4

我遇到过类似的情况,我们在相隔几毫秒内发布了相同的表格几次。

通过wireshark的数据包捕获确认了浏览器的重新传输和来自服务器的日志表明请求的到达。

另外进一步调查还显示,F5等负载均衡器报告了重传行为的发生率。所以值得与负载均衡器供应商核实。