我有一个servlet-jsp网络应用程序。登录操作中的一个请求在Firefox和IE浏览器上最多需要120秒才能完成。但是,同样的请求通常以chrome(低于1秒)完成。在调试代码时,我可以得出结论,我的Web应用程序过滤器正在快速返回响应,但浏览器显示它需要120秒才能收到它。如果你看到下面的firefox开发人员工具,它会显示等待时间为360毫秒,接收时间为120 大约在IE上也可以看到同样的行为。可能导致这种情况的任何线索?
编辑1:仅在返回302响应代码的请求中观察到此问题。
编辑2:我尝试使用拦截工具来检查请求,为此我必须通过127.0.0.1(localhost)的代理路由流量。一个观察结果是,在执行此操作时,应用程序显着更快。我观察到的一个可能的解释是代理应用程序向浏览器返回状态代码为200的302个请求。所以现在的问题是为什么在Firefox和IE浏览器上302调用会变慢?
答案 0 :(得分:0)
最后能够从我的应用程序本身解决此问题。在代码中的一个位置,在响应的输出流上调用刷新操作。
super.getOutputStream().flush();
这仅在请求不属于302的情况下才有意义,因为302s在响应中没有任何数据。 Chrome很聪明,可以看到并且不会等待任何数据。但是,firefox和IE一直在等待数据,因此该特定调用的连接未关闭。这会导致延迟,这可以在我在问题中附加的图像中看到(浏览器尝试下载从未到过的内容)。
我现在已经更改了代码以执行302s调用的刷新操作。这解决了整个问题。
答案 1 :(得分:-2)
每个浏览器都有自己的设置来处理连接。有限制。
答案聚合已经存在:
how-to-solve-chromes-6-connection-limit
编辑:自编辑问题以来,我的答案不再符合该主题。
如果网络应用的请求在不同的浏览器上采取不同的行为,那么问题应该在客户端。 (在单一请求 - 响应交互的范围内)