报错是这么冒出来的。页面源码里所有图片都是 https,仍然报混合内容,控制台里能看到一条 http 请求,来源是脚本运行时拼出来的地址。

中间走过弯路,把「第三方统计脚本加载了 http 资源」当成主因,改完现象没变。

原因不止一个,得分开看。脚本把接口域名写死成 http,运行时才拼出地址。还有一种是CDN 返回的脚本里带 http 的兜底地址。

另外,只有部分浏览器上报,报告数量和实际不一致。

上来先在控制台筛出以 http 开头的资源

document.querySelectorAll('img,script,link').forEach(e => { if ((e.src || e.href || '').startsWith('http:')) console.log(e.src || e.href); })

全局搜硬编码的 http 地址

grep -rn "http://" assets/js/ | head -20

然后接口域名改成 https

const API = 'https://api.example.com/v1';

等前面都确认过,再加 CSP 上报收集漏网请求

Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-report

这类问题以前遇到过,但这次的触发条件和上次不一样。

恢复的判定其实很直接。一周后混合内容提示不再增加,控制台里也没有 http 请求。

补一句。混合内容不一定写在 HTML 里,动态拼出来的地址同样会被拦,排查要连脚本一起搜。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189