取消HttpRequest后,浏览器从服务器挂起直到超时


Browser hangs till Timeout from server after cancelling HttpRequest

我有一个flex应用程序,它需要多个长http请求才能从服务器获取数据。在运行时,一个随机的http请求只是挂起。浏览器网络面板显示http请求挂起,直到正好五分钟。在此期间,从同一浏览器会话向该主机名发出的任何请求都不会加载(挂起)。

我尝试修改keep-alive请求头,但服务器响应似乎重置为默认值,无论如何只有5秒。

我在apacheconf的Timeout指令下找到了300s的值。将Timeout(超时)从300更改为30时,浏览器主机挂起时间更改为30秒。为什么浏览器在新选项卡中取消httpRequest后仍在等待Timeout消息?

我正在使用ustream.close()关闭actionscript urlstream。使用ustream = new URLStream()重新初始化urlstream。在未关闭的情况下进行初始化时,上一个请求将完成,从而导致加载速度减慢和带宽增加。我担心actionscript close()无法正确地关闭http请求,但这种情况只会发生一些时候。

罪魁祸首是php会话锁。服务器调用的php文件用于从会话中获取一些数据。PHP使用会话锁来确保会话数据的一致性。因此,一次只有一个文件可以保持与服务器的打开连接。当从浏览器端关闭urlstream时,apache接受下一个请求,但要等到上一个请求完成或超时。解决方案是确保在关闭流之前关闭php文件中的所有会话。

为了进一步减少服务器开销,我现在从GET参数传递一个密钥,而不是维护会话。session_write_close可用于阻止会话锁定。

在这个博客

的帮助下,我使用mod_statusExtendedStatus On来调试Apache进程