问题 大多数浏览器在浏览器中显示PDF时会发出多个HTTP请求


在浏览器中显示PDF时,大多数(IE,FF,Safari,Chrome,Opera)是否为PDF文件生成多个HTTP请求?我正在研究与WebTrends Web Analytics软件集成的问题,围绕PDF的统计数据似乎不正确。支持告诉我,因为WebTrends解析Web服务器访问日志以确定流量,下载等,所以很难确定准确的PDF下载,因为:
当用户点击PDF并通过Acrobat Reader浏览器插件在用户浏览器中打开PDF时,每个页面一次一个地下载 - 如果用户仅查看该页面,则会这样做以节省带宽50页PDF的前2页,只下载前2页。

这对我来说听起来很可疑(如何将HTTP请求仅用于提供二进制文件的一部分?) - 我一直在搜索谷歌,但没有发现任何与此有关的内容。

我将尝试找一些IE软件,让我明天嗅探HTTP流量,看看我是否能观察到这种现象。

任何信息/想法都很受欢迎。


8739
2017-11-30 03:47


起源

这不是答案,但http确实支持通过内容范围标题下载部分文件。也许PDF使用它...... 举重若轻 - Will
我发现Fiddler非常方便这种IP数据包嗅探。 - Nate C-K
看到 RFC 2616,第3.12节。 - Julian Reschke


答案:


如果您的站点返回如下的HTTP响应标头:

Accept-Ranges: bytes

阅读文档的几KB后,PDF阅读器将关闭初始连接。然后,它根据需要使用Range请求标头请求文档的各个部分,例如:

Range: bytes=242107-244329, 8060-76128

执行此操作的URL的示例是 http://www.ovationguitars.com/img/OVmanual.pdf 。

如果您不返回Accept-Ranges标题,则PDF文档将在单个请求中下载(例如, http://manuals.info.apple.com/en/iphone_user_guide.pdf )

您可以使用IE查看PDF阅读器的行为 HttpWatch的

**免责声明:此答案由HttpWatch的制造商Simtec Limited发布**


13
2017-11-30 09:32



非常有意思谢谢!因此看起来这是可能的,但是经过进一步调查(观看HTTPRequests / Respsonses)后,IE的Adobe Acrobat阅读器插件似乎不支持以这种方式创建请求(并且可能也不是为PDF提供服务的Web应用程序,我没有发送任何合成请求的字节范围) - empire29
我检查了iphone_user_guide.pdf(manuals.info.apple.com/MANUALS/1000/MA1565/en_US/...)在Chrome中,我得到2个请求:第一个是好的。第二个被取消。 - Olivier Masseau
我今天仍然看到这种行为,Fiddler表明没有涉及“接受范围”标题。 - Glen Little
仅供参考 - 我尝试禁用Chrome的PDF查看器并使用 适用于Chrome的PDF.js插件 (这是FF使用的) - Chrome仍然继续发布(然后取消)第二个请求...... - zam6ak


对于我来说,截至2016年6月,Firefox和IE11只拨打一个电话。

如果没有,Chrome会拨打两个电话 Content-Disposition 头。如果缺少,Chrome会执行两次GET,似乎取消第二次,并在浏览器中显示PDF。服务器不知道第二个被取消,并再次发送PDF。

从服务器发送此标头时,Chrome只会拨打一个电话并启动或保存该文件。

Content-Disposition: attachment

(您还可以建议用户保存文件时使用的文件名...)

Content-Disposition: attachment; filename=test.pdf

2
2018-06-02 19:09



添加此标题会阻止第二次调用,但它也会导致Chrome像附件一样下载PDF而不是立即在浏览器中打开它。 - kman
是。我仍然认为这是一个错误,但这是一种解决方法。 - Glen Little
那么问题是Chrome的PDF插件。使用Content-Disposition:附件不使用PDF插件。这就是没有错误的原因。更多细节在这里: bugs.chromium.org/p/chromium/issues/detail?id=587709 - Olivier Masseau


我的想法是你的位置:你的插件不能(也不应该)将PDF分成请求。

我有一个Web应用程序,它根据请求(单个请求)提供PDF文件并显示在插件中。它显示整个PDF而不会获得任何更多信息。

此外,如果您正在寻找HTTP嗅探器,您可以尝试 提琴手。我发现在网站调试期间这很有用。


0
2017-11-30 03:55



我使用IE(该公司的官方“支持”浏览器)使用最新的Adobe Acrobat reader插件在HTTPWatch中检查了它,它正在拉下整个PDF。我没有在标题中看到有关字节范围的任何内容。 - empire29


在我的测试中,如果我启用了REST控制台4.0.2扩展,则对Chrome的双重请求会在Chrome中出现。停用此扩展程序可使Chrome按预期工作(只有一个请求)。

编辑:启用Instapaper扩展程序也会使Chrome对PDF进行双重请求。


0
2018-06-07 12:51