Java Firefox和IE对302状态重定向请求的速度较慢

Java Firefox和IE对302状态重定向请求的速度较慢,java,google-chrome,internet-explorer,firefox,servlets,Java,Google Chrome,Internet Explorer,Firefox,Servlets,我有一个servlet jsp web应用程序。登录操作中的一个请求需要120秒才能在Firefox和IE浏览器上完成。然而,同样的请求通常在chrome中完成(低于1秒)。在调试代码时,我可以得出结论,我的web应用程序过滤器正在快速返回响应,但浏览器显示接收响应需要120秒。如果您看到下面的firefox开发者工具,它显示等待时间为360ms,接收时间为120 同样的行为也可以在IE上看到。有什么线索可能导致这种情况吗 编辑1:只有返回302响应代码的请求才会出现此问题 编辑2:我尝试使用

我有一个servlet jsp web应用程序。登录操作中的一个请求需要120秒才能在Firefox和IE浏览器上完成。然而,同样的请求通常在chrome中完成(低于1秒)。在调试代码时,我可以得出结论,我的web应用程序过滤器正在快速返回响应,但浏览器显示接收响应需要120秒。如果您看到下面的firefox开发者工具,它显示等待时间为360ms,接收时间为120 同样的行为也可以在IE上看到。有什么线索可能导致这种情况吗

编辑1:只有返回302响应代码的请求才会出现此问题


编辑2:我尝试使用拦截工具检查请求,为此我必须通过127.0.0.1(localhost)的代理路由流量。一个观察结果是,在执行此操作时,应用程序的速度明显加快。我观察到的一种可能的解释是,代理应用程序将状态代码为200的302个请求返回到浏览器。现在的问题是为什么Firefox和IE浏览器上的302呼叫速度慢?

每个浏览器都有自己的连接处理设置。这是有限度的

答案聚合已经存在:

编辑:由于问题已编辑,我的答案与主题不再匹配


如果web应用程序的请求在不同浏览器上的行为不同,那么问题应该在客户端。(在单请求-响应交互范围内)

终于能够从我的应用程序本身解决这个问题。在代码中的一个地方,正在对响应的输出流调用flush操作

super.getOutputStream().flush();
这仅在请求不是302类型的情况下进行,这是有意义的,因为302在响应中没有任何数据。Chrome足够聪明,可以看到这一点,并且不会等待任何数据。但是,firefox和IE一直在等待数据,因此该特定呼叫的连接没有关闭。这会导致延迟,这可以从我在问题中附加的图像中看到(浏览器尝试下载从未到达的内容)


我现在已经更改了代码,对302s调用也执行了刷新操作。这就解决了整个问题。

您能提供一些补充信息吗。您使用什么类型的登录?登录流执行哪些操作?它连接到数据库了吗?什么类型的数据库?客户端如何调用服务器端?Ajax请求?它调用servlet上的一个操作?我有一个index.jsp页面使用以下命令调用servlet:response.sendRedirect(request.getContextPath()+“login”);假设数据库调用在chrome上正常工作,我发现了这个问题。看看公认的答案。问题稍有不同,但可能有用。您是否在
response.sendRedirect()
之后编写了返回指令?不,没有返回指令,它只是过滤器的结尾。编辑:我误解了您的问题,在我之前的评论中,sendRedirect()后面有一个返回语句。长时间等待的症状表明您在调用重定向之前错误地将某些内容写入响应正文和/或显式设置了错误的响应内容长度标题。要排除一个和另一个,请调用
response.reset()response.sendRedirect()前面的行中的code>
并确保尽快退出servlet方法(通常在
response.sendRedirect();
之后直接返回;
)。如果这样做有效,那么在执行重定向之前,查看servlet代码中错误设置头或写入正文的代码。我尝试在firefox上更改浏览器的http连接限制,但没有任何改进。我尝试了很高的值和很低的值。你可以在浏览器中用一个标签试试。已清除所有会话/cookie/缓存。您可以比较每个浏览器的请求头。两个浏览器中唯一不同的请求头是“UserAgent”