当前位置:  开发笔记 > 编程语言 > 正文

PDF生成结果在Chrome中的ERR_INVALID_RESPONSE中

如何解决《PDF生成结果在Chrome中的ERR_INVALID_RESPONSE中》经验,为你挑选了3个好方法。

当以编程方式(通过PHP)在浏览器中生成PDF时,渲染的PDF在Firefox和Safari中都可以正常显示,但Chrome会返回ERR_INVALID_RESPONSE.它是一个有效的PDF - 可以在工作浏览器中保存后使用Adobe Reader/Preview在本地打开,一旦从其他浏览器保存PDF,甚至可以在Chrome中打开.

正在读取PDF文件file_get_contents(),给出当前时间戳,然后传递给浏览器.解决方法包括将文件保存到临时位置并重定向用户(至少对于Chrome),但这并不理想.

我研究了它,只能找到2008年以来的错误报告.

我有一个标题错误.生成PDF后,以下标题将发送到浏览器(再次在FF,Safari和IE中正常工作):

    header('Content-type:application/pdf');
    header("HTTP/1.1 200 OK");

我也尝试在Stack Overflow上搜索后添加以下标题,但无济于事:

    header("Content-Transfer-Encoding: binary");
    header('Accept-Ranges: bytes');

Chrome需要缺少标题吗?有没有人有动态生成的PDF在Chrome中显示的经验?

编辑:我的一个更突出的问题是什么可能导致这在Chrome本地工作正常,但不适用于服务器环境.

预先感谢您的任何帮助.



1> Cyberdelphos..:

在我的情况下,我不得不将这两个参数添加到标题,因为wordpress正在发送404代码,因为它无法识别我的php函数的url:

header("Content-type: application/pdf",true,200);

正如wordpress.stackexchange上的答案中所述.

这会强制标题替换(第二个参数true)由wordpress生成的404状态代码,因为它无法识别自定义URL,并设置200 OK(第三个参数200).

所以它结束了这样的事情:

$pdf_name = "test.pdf";
$pdf_file = "/absolute/path/to/my/pdfs/on/my/server/{$pdf_name}";
header('Content-type: application/pdf',true,200);
header("Content-Disposition: attachment; filename={$pdf_name}");
header('Cache-Control: public');
readfile($pdf_file);
exit();



2> Alpesh Panch..:

试试这个





...
...
...

确保在将PHP脚本输出发送到浏览器之前调用上面的标题代码.



3> Andrew Klatz..:

我要感谢大家的回答.

事实证明这与标题无关.在尝试以各种方式更改/删除标头(检测编码,尝试使用和不使用内容长度等)之后,我们决定深入研究更深入的httpd日志,以查看是否有任何内容针对Chrome进行了不同的解析.

事实证明,mod_sec在我们的服务器上标记了请求(仅出于某种原因来自Chrome)作为文件注入攻击的尝试并且返回403禁止响应.Chrome将其显示为ERR_INVALID_RESPONSE403而不是403.

CDN的主机名存在于请求中(我们在端点上进行了充分的检查以确保该文件确实是一个允许的资源),而是在服务器上构建URL.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有