防止浏览器configuration错误下载大型PDF文件?

我有一个运行Apache的网站,其主要目的是提供大(10-30 Mb)的PDF文件。 我经常从用户那里收到电子邮件,说他们在下载文件时遇到了问题:

由于我不能重现这些问题,而且对绝大多数用户来说似乎也不是这样,所以很难弄清楚发生了什么事情。 据推测,用户错误configuration了浏览器或插件,或者在某些情况下,这是浏览器或插件的可用性问题。 让用户报告特定的错误信息或行为,描述他们的configuration等等,就像拉牙一样。

我已经看到了一些描述类似问题的其他问题,但是它们似乎是IIS特有的,而我运行的是Apache:

  • Acrobat 7停止从IIS 7下载PDF

  • 使用Firefox / Chrome从服务器上下载PDF文件

这个错误似乎不符合我得到的(模糊的)报告:

  • 打开PDF时“IE无法显示网页”

是否有任何技术防弹我的设置,以便用户不会遇到这么多的这些问题? 在JavaScript中的浏览器检测与适当的消息? 警告用户针对特定的浏览器/插件组合,或自动检测这些组合? 现在,我甚至不能告诉我在apache日志文件中要查看哪些行,以查看服务器端是否logging了任何错误。 可能所有这些变得比您期望提供一个普通的旧静态文件更复杂,因为Adobe Reader试图变得棘手 – 尽pipe这些PDF没有被优化。

如果有人想尝试重现错误,用户报告问题的pdf文件在这里: http : //www.lightandmatter.com/sr/sr.pdf [现在可能不可能重现行为,因为我'已经实现了HåkanLindqvist的答案]

为了弄清楚是否有什么可以改进的地方,我想你会真的想找出这个问题发生的浏览器/ PDF查看器插件组合,并试图find一种方法来重现它。

在这个问题中提到了Chrome和Firefox,但至lessChrome自带了pdf查看器。 但是,使用Acrobat Reader插件或类似的浏览器是完全可能的,所以只要知道浏览器并不真正回答使用的软件。

另一方面,如果目标是让用户只需下载文件,而不想处理各种插件的怪异情况,则可以考虑指示浏览器不要打开文件,而只是下载它。

这可以通过在HTTP响应中设置Content-Disposition: attachment来完成。

当然,根据你的用户如何使用这些文件,这也可能导致混淆,但我想只是让浏览器保存一个文件,然后在本地打开它应该不太容易出错。

如果你可以复制这个,看看下载状态,请求和响应头,它会给你一个线索。

 **Response Headers** Accept-Ranges bytes Connection Keep-Alive Content-Length 9531692 Content-Range bytes 11278-9542969/9542970 Content-Type application/pdf Date Tue, 24 Jun 2014 21:08:45 GMT Etag "1b78005-919d3a-4f550c11dff40" Keep-Alive timeout=15, max=100 Last-Modified Mon, 24 Mar 2014 02:11:33 GMT Server Apache/2.2.16 (Debian) **Request Headers** Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Connection keep-alive Host www.lightandmatter.com If-Range "1b78005-919d3a-4f550c11dff40" Range bytes=11278- User-Agent Mozilla/5.0 (Windows NT 6.2; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0 

下载状态 – 206部分内容 。 根据定义,这意味着“客户”提出这个要求,而不是相反。

所以客户端请求,在这种情况下, 字节= 11278- ,响应头确认它正在接收接受范围

有一件事会让我感到困惑,那就是数字8之后有一种炒作。

最初发布在这里 ,但一个可能(未经testing)的解决scheme是将以下添加到htaccess文件。

 # Disable Byte-range for PDF files <Files *.pdf> Header set Accept-Ranges none </Files>