浏览器如何处理HTTP Keepalive竞争条件?

问题描述:

目前存在于HTTP存活机制已知的竞争状态:浏览器如何处理HTTP Keepalive竞争条件?

据我了解,我需要我的HTTP客户端,也有比我的HTTP服务器较短的超时,或者在获取TCP-FIN或TCP-RST时重试。

我的问题是,如何做到今天的网络浏览器,即use the HTTP keepalive feature,处理这种竞争情况。他们重试吗?

我很乐意参考,谷歌搜索还没有拿出任何东西。

根据RFC,在这些情况下,服务器应以408错误代码进行响应,向客户端发信号通知其连接已关闭。正如RFC所述:

如果客户端在传输中有未完成的请求,客户端可能会在新连接上重复该请求。

这意味着由客户端(也就是每个浏览器)来决定如何处理408响应。有2种选择:

  • 处理它优雅:重试在一个新的连接剩余的请求自动,使用户停留完全不知道底层故障所发生
  • 的快速失败的:显示用户的故障并带有适当的408错误信息

例如,Chrome似乎在过去一直沿用第二种方法,直到人们开始将此视为“越野车”行为并切换到第一种方法。您可以找到与Chromium bug here相关的bug线程以及相关的代码更改here

注意:如您在连接线的最后阅读电子邮件,浏览器执行这些重试,只有当一些请求已经成功在这方面。因此,如果您尝试使用单个请求重新生成该请求,并返回408响应,则您会注意到Chrome在这种情况下不会重试。

+0

感谢您花时间和研究。 –