为什么我的用户的下载在IE中随机停止?

时间:2012-05-16 14:50:26

标签: windows internet-explorer

我的下载是由iframe中的重定向触发的。

  1. 用户点击“下载”按钮
  2. 我们的JS从服务器获取下载URL(它是一个超时URL,因此必须以这种方式完成)
  3. 将iframe重定向到下载网址,该网址包含附件内容,因此浏览器会在不更改网页位置的情况下启动下载。
  4. 这适用于所有用户和浏览器......除了一些IE用户。

    我试图重现这个问题,这就是我想出的:

    • 如果快速点击“保存或打开”对话框,则下载始终有效
    • 如果慢慢点击“保存或打开”对话框(如10-20秒),下载有时会起作用,有时则不然。我一直无法找到模式。

    以下是卡住时的样子:

    enter image description here

    问题不在于S3上的链接超时 - 我上面的实验完全在时间窗口内。

    可能导致这些零星下载失败的原因是什么?

    更新

    服务器日志表明下载已完全发送给用户。

4 个答案:

答案 0 :(得分:6)

我做了一些测试,在Windows 7中使用IE 9下载​​LLVM test suite,一个78 Megs文件。点击链接时会开始下载。 Internet Explorer不会等待您确认或取消。 IE将字节保存到名为fizzbuz的文件中的下载目录中。 partial 。 IE将通过在文件完成时重命名文件或删除文件来赶上您的选择。

这可能是计时问题或HTTP问题。

时间问题

是否有可能另一个进程打开文件,甚至可能锁定它?也许是过度热心的反病毒或实时备份软件?有可能是关闭和重命名操作(必须在服务器发送整个文件后进行)如下所示:

  1. 将最后一个有效字节写入fizzbuzz。部分文件
  2. 关闭文件
  3. 重命名文件
  4. 如果进程抓取文件以进行2到3之间的独占读取,该怎么办?也许该应用程序对文件进行了一些更改,比如写入一个让IE混淆的备用NTFS流?

    请记住,浏览器插件也会收到下载结束的通知。另一种计时问题可能是由monitors the download的插件引起的,并且看到它结束,会执行某些操作。在某些情况下,该操作可能会失败或永远不会返回。

    尝试在没有运行任何防病毒的情况下重现问题(比仅将文件列入白名单更好的测试)并且不加载任何浏览器插件。

    HTTP问题

    服务器和客户端必须就结束连接的方式达成一致。你必须:

    1. 关闭传输结束时的连接
    2. 指定下载长度
    3. 很难从远处调试这个,但如果可能的话,捕获下载的网络跟踪并寻找这些线索:

      1. Content-length标头不存在或者可能是N(浏览器将永远等待N个字节不会出现)?
      2. 每个客户端是否具有相同的代理配置?
      3. 非工作客户端是否降级为HTTP 1.0? (有一个名为“始终使用http 1.0到代理”的设置
      4. 从您的屏幕截图来看,浏览器似乎无法计算预计到达时间,但该下载与之间没有相关性。

答案 1 :(得分:4)

我不知道IE如何处理它,但在其他浏览器中,当您选择要存储文件的位置时,下载已经开始。您的下载网址超时是多少?你试过把它设得更高吗?它不止一次起作用吗? (如果没有,请检查您的日志是否有失败的访问尝试)。 祝你好运。

PS:如果无效,try this

答案 2 :(得分:0)

哪个版本的IE? 如果你在下载完成之前没有决定如何处理下载,IE8有时行为不端......

如果服务器记录的数据是发送到客户端/浏览器的,那么接下来要调查的是代理和浏览器。

您的屏幕截图实际上看起来像下载对话框,但尚未进行选择。在后台某处有选择屏幕吗?

答案 3 :(得分:0)

尝试将cache-control: max-age设置为大于0的值。我注意到IE可能会在设置为立即过期的内容(例如,使用no-cache)上搞砸了。