PDF下载损坏 / HTTP标头问题

PDF download corrupted / HTTP header problems

本文关键字:问题 HTTP 下载 损坏 PDF      更新时间:2023-10-16

我在一个应用程序中有一些旧代码,用于pdf文件下载(PDF文件约为350-400kb尺寸),最近我们抱怨(大约1%的客户)说pdf下载失败,损坏/损坏的文件错误。

这是代码(C 应用程序)设置标头的段落

String header;
header.append("Content-type: application/force-downloadrn");
header.append("Content-Transfer-Encoding: Binaryrn");
header.append("Content-length: %drn", filebuf.length());
header.append("Connection: Closern");
header.append("Content-disposition: attachment; filename=%srnrn", filename_to_download.chars());

字符串类和附加方法仅用于示例。

我理解上面的标头不是触发pdf文件下载的最佳方法(我已经通过" content-type application/ocket-stream and content-disposition:actactment; filename = fileName = example.pdf"来简化标头,并且似乎它为我工作)。

,但我无法理解为什么上述原始代码不应工作1%的时间。

我试图了解浏览器/Adobe组合,但似乎这里没有模式,是的,很少有客户在更改为" Chrome浏览器"时,它大部分时间都可以使用。

任何指针?

奋斗几天后终于弄清楚了这里发生了什么。

我们将内容长度设置为标题中的缓冲区大小(pdf文件大小),并将此数据发送给客户端,但是在Apache Module Mod_gzip/mod_deflate之间,将其发送到客户端,正在压缩数据缓冲区,到达客户端/浏览器的内容是"内容" - 长度:100个字节"但实际数据为60-70字节。

并非每个浏览器都抱怨此不匹配,但某些浏览器将此视为致命错误,并显示消息"无法下载文件"(我们在Win8/IE10和Win8/IE11中经常看到此问题,可能还有其他一些安全设置也是在浏览器上引起的!)。

对于修复程序,我们从标题中删除了"内容长度"。