我有一个RoR API正在进行分析操作,可能需要一段时间(2~5分钟)。
当响应在2分钟之前到来时,一切正常。浏览器只需挂起2分钟,一旦显示结果就显示结果。
现在根据HTTP 1.1规范,现代浏览器会在等待一段时间后自动重试。因此,如果计算时间过长(例如3或4分钟),API将从同一客户端获取新请求并重新启动所有内容。
如何阻止浏览器重试?我只是希望我的浏览器无论如何等待响应,并且永远不会重试。
答案 0 :(得分:1)
各种浏览器超时(TCP TTL,请求超时,连接超时)是浏览器安装中无法通过javascript等标准方式配置的设置。
如果你真的必须找到一种方法来保持与服务器的连接更长时间,你可以尝试实现WebSockets,但即使这样也可能受到浏览器,操作系统甚至网络设备的限制(路由器)。
因此,不建议您的应用程序依赖于特定的浏览器行为来正常运行。也不建议在与服务器的HTTP请求处理相同的线程/进程中进行长时间运行的进程,因为失去连接的某些人可能导致作业过早终止。您可能希望调查像Resque这样的gem来将长时间运行的作业移动到后台进程。
然后,您可以让您的webapp立即响应作业请求,并提供有关后台作业状态的信息,您不必担心浏览器请求重新发送或丢失连接等。