You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome浏览器中domPDF无法下载问题求助

解决Chrome中domPDF无法下载的混合内容问题

Chrome浏览器无法下载domPDF生成的文件,其他浏览器可正常使用,具体报错如下:

Mixed Content: The site at 'https://xxx.io' was loaded over a secure connection, but the file at 'https://xxx.io/pdf/?doc=auAjvjYi8yyOJIfPq3t4prhrYdWsDDxXIG85XiRyNGo' was redirected through an insecure connection. This file should be served over HTTPS. This download has been blocked. See https://blog.chromium.org/2020/02/protecting-users-from-insecure.html for more details.

相关代码

流式输出PDF的PHP代码

$domPdf = new Dompdf([
'isRemoteEnabled' => true,
]);
$domPdf->loadHtml($pdfHTML);
$domPdf->setPaper('A4');
$domPdf->render();
ob_end_clean();
$domPdf->stream($documentName, [
    'compress' => true,
    'Attachment' => true,
]);
exit();

PDF下载链接的HTML代码

<a href="https://xxx.io/pdf?doc=auAjvjYi8yyOJIfPq3t4prhrYdWsDDxXIG85XiRyNGo" onclick="downloadPDF()" class="mobile-hide no-ul "><span class="icon-pdf"></span></a>

排查与解决方案

1. 修复服务器重定向配置

报错核心是HTTPS请求被重定向到HTTP,触发Chrome的混合内容拦截规则。需要:

  • 检查服务器(Nginx/Apache)配置,确保所有HTTP请求强制跳转至HTTPS,避免出现HTTP访问路径
  • 排查pdf路由的后端逻辑,确认没有硬编码HTTP域名、或错误使用$_SERVER变量导致协议降级的情况

2. 确保资源与响应的HTTPS一致性

  • 检查PDF内容中引用的外部资源(图片、CSS),全部替换为HTTPS链接,避免混合内容触发拦截
  • 在输出PDF前添加安全响应头,强制浏览器使用HTTPS:
header('Content-Security-Policy: upgrade-insecure-requests');
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');

3. 检查前端下载逻辑

确认downloadPDF()函数内部没有异常跳转:

  • 避免函数中使用XMLHttpRequest或fetch请求HTTP协议的地址
  • 如果是通过JS触发下载,确保请求的URL始终为HTTPS

4. 规范PDF输出的响应头与缓冲区处理

优化输出逻辑,避免响应头异常:

  • 在ob_end_clean()前添加ob_start(),确保缓冲区被正确清理,避免残留输出干扰
  • 手动设置PDF相关响应头,明确内容属性:
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . $documentName . '"');
$domPdf->stream($documentName, [
    'compress' => true,
    'Attachment' => true,
]);

内容的提问来源于stack exchange,提问作者lostbyte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:40:17