同时请求时,IE中已下载的文件已损坏

时间:2012-12-13 09:59:24

标签: internet-explorer tomcat servlets apache2 download

我遇到了与在Internet Explorer中下载文件相关的棘手问题。服务器环境如下:

  • Apache2作为带有mod_jk
  • 的Web服务器
  • Tomcat6作为应用程序服务器
  • Java / Spring应用程序

文件由Java Servlet提供。当同时使用Internet Explorer从2个客户端请求某个文件时,会发生此问题。其中一个客户端无法获取整个文件,最终导致损坏的下载。

我使用Wireshark查看入站数据。下载停止在50k的90k文件中,并带有来自服务器的RELOAD(REsource LOcation和Discovery Framing)请求。

这仅在Internet Explorer中发生。多次使用Chrome / Firefox尝试相同的方案。每次下载成功完成后,文件都能正常运行。

我已经检查了应用程序和Apache日志。这个问题没有任何关系。通过调试级别的mod_jk日志。它记录了只发送了50k的文件。但是在任何地方都没有记录错误。

下载servlet也是线程安全的,doPost()方法中没有使用类变量。

那么如何修复或追踪这个问题的根源呢?

感谢。

3 个答案:

答案 0 :(得分:2)

没有足够的信息来诊断问题,但我可以建议仔细检查请求标头和资源标头(Content-LengthContent-Type,以及任何“深奥”标题使用Internet Explorer和(例如)Firefox。

我前段时间遇到问题,资源供应代码出错,发送的内容长度不正确。不知何故,这在Firefox和Chrome中有效,但导致Internet Explorer出错。您的问题可能类似。

两个(不同,据我所知)客户端导致问题的事实使我认为问题是服务器端某种方式;只有资源管理器传输的一些标题会击中你正在忽略的一些错误。知道标题可能有助于找到错误,或者至少提供一些如何解决它的提示。

我意识到(并且同意))如果下载servlet“真的”是线程安全的,那么它不是服务器问题,但另一方面,是真正的线程安全的服务器下载链不变,第二个IE客户端怎么会“知道”它实际上是第二个客户端?

答案 1 :(得分:1)

通常通过在下载脚本中提供正确的MIME类型来解决此问题。

但如果从直接位置下载这些pdf,那么问题就出在第三方软件中。

禁用防病毒/反恶意软件/防火墙软件和IE插件,以查看是否会导致问题。

答案 2 :(得分:0)

问题实际上是超时问题。 apache2 conf文件中的 TIMEOUT 参数设置为 5 而不是 300

当您使用IE请求文件时,浏览器会询问您是要下载文件还是直接打开文件。如果您在该选项屏幕上等待超过 TIMEOUT (5)秒,当我尝试同时点击同时从2台计算机点击链接时,服务器只发送一块文件并停止导致损坏的文件。但在FF / Chrome中,浏览器会在类似选择屏幕的后台启动下载,而无需等待您的决定。

我显然已经完全错误地诊断出这个问题了。但是我按照向我报告的内容,在尝试复制它时,错误发生了很多次,因为很明显我在那些屏幕上等待的时间超过5秒。