content-security-policy(csp)是w3c标准,firefox、safari、edge等现代浏览器均支持并执行;核心指令如script-src、style-src兼容性一致,但strict-dynamic、report-to、require-trusted-types-for等新特性在safari中存在延迟或不支持,meta方式不可靠,推荐优先使用http响应头配置。

Content-Security-Policy HTTP 响应头在非 Chromium 内核浏览器中**不会被忽略**,只要该浏览器支持 CSP 标准(基本所有现代浏览器都支持)。
CSP 是 W3C 正式推荐标准,Firefox、Safari、Edge(基于 Blink 之前用 EdgeHTML,也支持 CSP)、甚至旧版 IE10/IE11(仅部分支持)都会解析并执行它。不支持的浏览器才真正“忽略”——比如非常老的 IE9 或更早版本,但这类已基本退出实际场景。
Firefox 和 Safari 对 unsafe-inline 的处理是否和 Chrome 一样?
是的,行为高度一致:从 CSP Level 2 起,script-src 'unsafe-inline' 在 Firefox 和 Safari 中同样失效,前提是同时指定了 nonce- 或 sha256- 哈希值。
- 如果你只写
script-src 'unsafe-inline',且没加任何 nonce/hash,Firefox/Safari 仍会允许内联脚本(退化启用) - 但只要出现
nonce="abc"或sha256-...,unsafe-inline就被完全无视——这点和 Chromium 完全同步 - Safari 对
strict-dynamic支持较晚(iOS 15.4+/macOS 12.3+ 才完整),且要求必须与nonce共存,单独写无效
meta 标签方式的 CSP 在 Safari/Firefox 中是否可靠?
不可靠,尤其对脚本加载时机敏感的场景。
-
<meta http-equiv="Content-Security-Policy">只在文档解析早期生效;若标签出现在后或动态插入,Safari 和 Firefox 都可能直接忽略 - Firefox 会拒绝执行
meta中声明的script-src策略,如果页面已开始执行内联脚本(竞态条件) - 推荐只用 HTTP 响应头方式设置 CSP;
meta仅作降级或调试用途,不能用于生产环境的关键策略
哪些 CSP 指令在非 Chromium 浏览器中存在兼容性差异?
差异集中在新指令和扩展语法上,核心指令(script-src、style-src、connect-src)基本无差别。
-
worker-src:Firefox 73+、Safari 15.4+ 支持;旧版 Safari(≤15.3)会 fallback 到child-src,但行为不一致 -
require-trusted-types-for 'script':Firefox 已支持,Safari 目前(2026 年 4 月)仍不支持 -
report-to和report-uri:Safari 一直只认report-uri;report-to需要搭配Reporting-Endpointsheader,Firefox/Chrome 支持,Safari 不支持 -
base-uri在 Safari 中对<base>标签的拦截更严格,有时会意外阻断相对路径资源加载
最顶部位置写 meta、以及 Safari 对哈希值大小写的敏感(必须小写十六进制)。这些细节不报错,但策略就 quietly 失效。











