取消 HttpRequest 后浏览器挂起直到服务器超时
Posted
技术标签:
【中文标题】取消 HttpRequest 后浏览器挂起直到服务器超时【英文标题】:Browser hangs till Timeout from server after cancelling HttpRequest 【发布时间】:2014-01-04 19:43:01 【问题描述】:我有一个 flex 应用程序,它需要多个长 http 请求才能从服务器获取数据。在运行时,一个随机的 http 请求只是挂起。浏览器网络面板显示 http 请求待处理,直到 正好五分钟。在此期间,从同一浏览器会话向该主机名发出的任何请求都不会加载(待定)。
我尝试修改 keep-alive 请求标头,但服务器响应似乎重置为默认值,即 5 秒。
我在超时指令下的apache conf中找到了300s的值。将超时从 300 更改为 30 后,浏览器主机挂断更改为 30 秒。为什么在新标签页取消httpRequest后浏览器还在等待超时消息?
我正在使用 ustream.close()
关闭 actionscript urlstream。 urlstream 使用ustream = new URLStream()
重新初始化。在没有关闭的情况下初始化时,前一个请求会完成,导致加载速度较慢和带宽较高。我担心 actionscript close() 无法正确关闭 http 请求,但它只会发生几次。
【问题讨论】:
【参考方案1】:罪魁祸首是 php 会话锁。服务器调用的 php 文件用于从会话中获取一些数据。 PHP 使用会话锁来确保会话数据的一致性。因此,一次只有一个文件可以保持与服务器的打开连接。当从浏览器端关闭 urlstream 时,apache 会占用下一个请求,但会等待上一个请求完成或超时。解决方案是确保在关闭流之前关闭 php 文件中的所有会话。
为了进一步减少服务器开销,我现在从 GET 参数传递一个密钥,而不是维护会话。 session_write_close 可用于阻止会话锁定。
我使用mod_status
和ExtendedStatus On
在this blog 的帮助下调试Apache 进程
【讨论】:
以上是关于取消 HttpRequest 后浏览器挂起直到服务器超时的主要内容,如果未能解决你的问题,请参考以下文章
Python 客户端-服务器脚本挂起,直到我按下 [enter]