现场是这样的。全站上了 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,控制台警告消失,脚本功能恢复。
提醒一点。混合内容被拦截后,脚本不执行会导致统计和交互全部失效,用户看到的是页面正常但按钮没反应,很难第一时间发现。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。