现场是这样的。全站上了 https,页面里的一个第三方统计脚本还是 http,浏览器控制台报 blocked,脚本完全没有加载。

排查方向其实有限,先把可能性排一排。第三方脚本只提供 http 地址;主题里硬编码了 http 的资源地址;数据库里存着迁移前的旧地址。

扫描页面里的 http 资源

curl -s https://www.example.com/a/ | grep -o 'http://[^"]*' | sort -u

然后把资源地址改成协议相对或 https

UPDATE wp_posts SET post_content=REPLACE(post_content,'http://','https://');

末了确认控制台不再报混合内容

curl -s https://www.example.com/a/ | grep -c 'http://'

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

怎么算真的好了,看的是同一批现象。页面加载的资源全部为 https,控制台警告消失,脚本功能恢复。

提醒一点。混合内容被拦截后,脚本不执行会导致统计和交互全部失效,用户看到的是页面正常但按钮没反应,很难第一时间发现。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189