我做了一些测试,下载了LLVM 测试套件,这是一个 78 Megs 文件,在 Windows 7 中使用 IE 9。单击链接时开始下载。Internet Explorer 不会等待您确认或取消。IE 将字节保存到您的下载目录中名为 fizzbuz 的文件中。部分。IE 将通过在文件完成后重命名文件或在您取消文件时将其删除来赶上您的选择。
这可能是时间问题或 HTTP 问题。
时间问题
是否有可能另一个进程打开文件,甚至锁定它?也许是过分热心的杀毒软件或实时备份软件?关闭和重命名操作(必须在服务器发送整个文件后进行)可能是这样的:
- 将最后一个有效字节写入 fizzbuzz。部分文件
- 关闭文件
- 重命名文件
如果一个进程在 2 和 3 之间获取文件以进行独占读取怎么办?也许该应用程序对文件进行了一些更改,例如写入使 IE 感到困惑的备用 NTFS 流?
请记住,浏览器插件也会收到下载结束的通知。另一种计时问题可能是由一个监控下载的插件引起的,看到它结束,做一些操作。在某些情况下,该操作可能会失败或永远不会返回。
尝试在不运行任何防病毒软件(比将文件列入白名单更好的测试)且不加载任何浏览器插件的情况下重现问题。
HTTP问题
服务器和客户端必须就结束连接的方式达成一致。您必须:
- 在传输结束时关闭连接
- 指定下载的长度
很难从远处调试它,但如果可能的话,捕获下载的网络跟踪并寻找这些线索:
- Content-length 标头不存在或可能偏离 N (浏览器将永远等待 N 个字节,但不会出现)?
- 每个客户端是否具有相同的代理配置?
- 非工作客户端是否已降级到 HTTP 1.0 ?(有一个名为“始终通过代理使用http 1.0”的设置
从您的屏幕截图来看,浏览器似乎无法计算预计到达时间,但它与下载之间没有关联。