记录一下那天晚上的排查过程。文章里的视频用第三方播放器嵌入,封面图地址是 http,页面本身是 https,控制台报 mixed content,封面加载不出来,蜘蛛抓到的首帧是空白。

排查方向其实有限,先把可能性排一排。嵌入代码是几年前复制的,图片地址写死成 http。少数情况下是播放器脚本自身还会再请求一次 http 的封面。

另外,CSP 没配 upgrade-insecure-requests 兜底。

上来先在源码里找 http 资源

curl -s https://www.example.com/post/1 | grep -o 'http://[^"'\'' ]*' | head

批量替换嵌入代码里的协议

wp db query "UPDATE wp_posts SET post_content=REPLACE(post_content,'http://player.example.com','https://player.example.com');"

等前面都确认过,再加 CSP 的自动升级指令

add_header Content-Security-Policy "upgrade-insecure-requests";

改之前先确认了最近有没有人动过配置,避免白查一遍。

这次没动代码,只在配置和运行环境上找原因。

改完先别撤,确认这几项。替换后封面正常加载,控制台混合内容告警清零,视频卡片重新出现首帧缩略图。

补一句。混合内容拦截是浏览器行为,蜘蛛看到的就是失败结果,别指望用户端正常就等于没问题。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189