上线内容安全策略后控制台报 Refused to load the script,广告全空,其他功能正常。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

Content-Security-Policy: script-src 'self' https://cdn.ads.example;
  frame-src https://ads.example;

策略里的脚本来源没有加入联盟域名,广告 iframe 的来源也没放行。之前靠内联脚本加载,正好被拦下。这一点先确认清楚,后面就不用反复试。

碰到「广告 CSP 拦截」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

具体做法是,在脚本来源里加上联盟域名,别用通配符放开全部;框架来源同样加上广告域名;先用只上报模式跑一天,看还有哪些被拦;确认无报错后再切成强制模式。

改完照着核一遍,控制台没有 Refused to load 报错,广告正常显示且策略仍是强制模式。

作者 9823189