C++ PDF下载损坏/HTTP标头问题

C++ PDF下载损坏/HTTP标头问题,c++,pdf,http-headers,download,C++,Pdf,Http Headers,Download,我在一个用于下载PDF文件(PDF文件大小约为350-400KB)的应用程序中有一些遗留代码,最近我们收到投诉(约1%的客户)说PDF下载失败,文件损坏/损坏 下面是一段代码(C++应用程序)设置头以供下载 String header; header.append("Content-type: application/force-download\r\n"); header.append("Content-Transfer-Encoding: Binary\r\n"); header.appen

我在一个用于下载PDF文件(PDF文件大小约为350-400KB)的应用程序中有一些遗留代码,最近我们收到投诉(约1%的客户)说PDF下载失败,文件损坏/损坏

下面是一段代码(C++应用程序)设置头以供下载

String header;
header.append("Content-type: application/force-download\r\n");
header.append("Content-Transfer-Encoding: Binary\r\n");
header.append("Content-length: %d\r\n", filebuf.length());
header.append("Connection: Close\r\n");
header.append("Content-disposition: attachment; filename=%s\r\n\r\n", filename_to_download.chars());
String类和append方法只是一个示例

我知道上面的标题不是触发PDF文件下载的最佳方式(我通过使用“内容类型应用程序/八位字节流和内容处置:附件;文件名=example.PDF”简化了标题,似乎对我有用)

但我无法理解为什么上述原始代码在1%的时间内不能工作

我试图理解浏览器/adobe的组合,但这里似乎没有模式,是的,很少有客户提到的一件事是,当他们改为“chrome浏览器”时,它大部分时间都能工作


有什么建议吗?

经过几天的斗争,终于弄明白这里发生了什么

我们将内容长度设置为代码头中缓冲区的大小(pdf文件大小),并将此数据发送到客户端,但在apache模块mod_gzip/mod_deflate压缩数据缓冲区和到达客户端/浏览器的是“内容长度:100字节”,但实际数据是60-70字节

并非所有浏览器都会抱怨此不匹配,但某些浏览器会将此视为致命错误并显示消息“无法下载文件”(我们在Win8/IE10和Win8/IE11中经常看到此问题,可能还有其他一些安全设置也会导致浏览器出现此问题!)

为了解决这个问题,我们从标题中删除了“内容长度”