在查看我们的 Apache 访问日志时,当用户从我们的服务器下载 PDF 文件时,经常(但不总是)会发生以下情况。URL 首先被请求并以状态 200 (ok) 和完整回复大小发送,然后紧接着是来自同一客户端的对同一 URL 的大量请求,回复大小较小,状态代码为 206(部分回复)。
换句话说,一些客户端首先成功下载了整个PDF,然后又出现了下载大量文件的“块”。
为什么我们会看到这个?
在查看我们的 Apache 访问日志时,当用户从我们的服务器下载 PDF 文件时,经常(但不总是)会发生以下情况。URL 首先被请求并以状态 200 (ok) 和完整回复大小发送,然后紧接着是来自同一客户端的对同一 URL 的大量请求,回复大小较小,状态代码为 206(部分回复)。
换句话说,一些客户端首先成功下载了整个PDF,然后又出现了下载大量文件的“块”。
为什么我们会看到这个?
这些是“字节范围”请求(HTTP/1.1 功能),通常由 Adobe Reader 浏览器插件发出。
它们旨在支持能够在浏览器中点击链接到理论上的 50 MB PDF,获取目录,点击 TOC 中的链接到最后一页或两页,并且读者下载最后几页,给出您可以立即访问所需内容,并在后台继续下载 PDF 的其余部分。
一些 Adobe Reader 版本将此称为“快速 Web 视图”。
我不确定为什么您会首先看到完整的请求以及完整的文件大小,所以我不确定我是否已经令人满意地回答了您的问题。凭直觉,我发现一些进一步的阅读似乎证实了浏览器对文件的原始 HTTP 请求在移交给 Adobe 插件后通常会在后台继续。该插件发出各种字节范围请求,但浏览器的原始请求最终是文件的完整大小,因为它不是一个字节范围请求开始。
我不确定 Adobe 是否会将此视为错误。它可以有效地将传输的数据翻倍,但它可以使客户端的“用户体验”“看起来更快/响应更快”。:)