尽管设置了内容长度标头,但 Safari/Firefox/Chrome 在下载大文件时仅显示不确定的进度条。知道为什么会这样吗?这是标准(-ish)Apache 2.2 安装。
bash# curl -I http://nodebox.net/download/nodebox2/nodebox-2.0.0.960-setup.exe
HTTP/1.1 200 OK
Date: Mon, 14 Dec 2009 13:35:04 GMT
Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_wsgi/2.3 mod_perl/2.0.2 Perl/v5.8.8
Last-Modified: Mon, 14 Dec 2009 11:54:22 GMT
ETag: "11acd74-1e7c1de-ef263780"
Accept-Ranges: bytes
Content-Length: 31965662
Vary: Accept-Encoding
Content-Type: application/x-msdos-program
答案1
您说的“中间进度条”是什么意思? - 它在下载框中根本不显示还是根本不显示进度。它显示什么大小的文件,不显示什么?您测试的机器与该服务器的连接速度是多少?
可能是因为小文件下载速度太快,根本来不及显示进度,所以您根本看不到进度。即使下载不是即时的,也可能出现这种情况,因为下载过程不仅仅是“获取内容”,而是:
- 请求对象(这通常需要很短的时间,对于 HTTP 来说会稍微长一些,但如果服务器或链接繁忙,则可能需要更长时间)
- 等待第一个信息下来(如果它是脚本的结果和/或您正在使用 mod_gzip 或类似程序,则这可能需要一小段时间,因为在这些情况下,Web 服务器上的进程可能会等到整个脚本完成后才能发送第一个字节的数据)
- 传输数据 - 对于小文件,在快速链接上,这可能是视觉上瞬时的(进度条可能直到第一个字节到达才会绘制,最后一个字节可能在几分之一秒后到达),因此进度条的出现和消失速度比你看到的要快
- 下载后 jigger-pokery(AV 检查等),这可能需要一段时间,具体取决于您的设置
只有在步骤 3 中您才会看到进度条,而且在快速链接上,这可能只是下载时间的一小部分。某些代理安排可能会加剧这种情况,因为它们可能会缓冲较大的文件,该文件需要几秒钟(或几十秒,甚至更长时间)才能在您的外部网络连接上传输,这样客户端应用程序就会看到请求发出,等待响应的第一个字节(在此期间代理实际上正在获取文件),并在几分之一秒内从代理一次性获取所有内容(因此从它的角度来看,上面的步骤 3 几乎是即时的)。
以上所有内容都非常笼统 - 您需要在问题中添加更多细节和分析才能获得更具体的答案。