You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSP报告中status 200状态码的含义及Edge特定情况咨询

CSP报告中status-code 200的含义及Edge 18的特殊情况

先直接拆解核心:CSP报告里的status-code字段,指的是被浏览器拦截的那个资源本身的HTTP响应状态码,并不是CSP报告发送到你服务器时的状态码。

在你的案例里,被拦截的脚本https://redacted.com/static/js/browser.polyfill.min.js?etag=dp1dNqwV其实已经被服务器成功返回了(HTTP 200状态),但因为它不符合你的CSP策略,所以浏览器还是拒绝加载它,同时把这个拦截事件记录在CSP报告里。

为什么只有Edge 18会触发这个报告?

问题出在你的CSP策略里的'strict-dynamic'指令——这是CSP 3的新特性,但基于EdgeHTML引擎的旧版Edge 18完全不支持它。

当浏览器不认识'strict-dynamic'时,会直接忽略这个指令,然后按照CSP 2的规则校验脚本:

  • 你的script-src里只列出了一堆nonce值和'unsafe-inline',但这个polyfill脚本没有携带任何一个合法的nonce
  • 你也没有在script-src里添加'self'这类允许源的规则(因为strict-dynamic本来会允许可信脚本加载的后续脚本,但Edge 18不认这个逻辑)
  • 所以Edge 18判定这个脚本违反了CSP,触发了报告

而其他现代浏览器支持strict-dynamic:如果这个polyfill是由你页面上带有合法nonce的脚本加载的,strict-dynamic会自动允许它执行,自然不会触发报告。

兼容Edge 18的修复方案

如果你需要支持这个旧版本浏览器,可以在script-src里添加'self'作为 fallback:

script-src 'self' 'strict-dynamic' 'unsafe-inline' 'nonce-M2EyZTVhMzItNDY5My00YTI5LWE3MzEtM2NjMjdjMjc0ZmQ0' [你的其他nonce值...]

这样,当Edge 18忽略strict-dynamic后,会允许同域的脚本加载,就不会再触发这个报告了。当然,添加'self'会稍微降低一点安全性,但这是兼容旧浏览器的合理权衡。

内容的提问来源于stack exchange,提问作者Jezen Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:07:13