PWA用哈希收紧CSP后service-worker加载失败求助
问题分析与解决办法
首先纠正你的误解:worker-src 'self' 只负责允许加载Service Worker文件本身,而Service Worker内部通过importScripts引入的脚本,依然受script-src指令的约束,和worker-src无关。这就是主页面能正常加载,但SW里加载pack.js触发CSP报错的核心原因。
具体解决方案
- 把
pack.js对应的哈希值(也就是你主页面里integrity="sha256-hash1"中的sha256-hash1)添加到CSP的script-src指令中。这样SW通过importScripts加载pack.js时,哈希匹配就能通过CSP校验。 - 若SW还需要执行其他内联脚本或引入其他外部脚本,同样要把对应内联代码的哈希值、外部脚本的哈希值加入
script-src。
调整后的CSP头示例:
Content-Security-Policy: script-src 'sha256-hash1' [其他需要的哈希值]; worker-src 'self';
(注:如果主页面已无需'self'源,可直接移除,只保留必要的哈希值)
额外注意事项:
- 确保
pack.js的哈希值计算准确,前缀(如sha256-)、大小写、哈希字符串要和CSP配置完全一致。 - 若使用CSP 3+版本,也可使用
script-src-elem单独控制外部脚本加载,但多数场景下直接用script-src即可覆盖需求。
内容的提问来源于stack exchange,提问作者Vlad S
相关产品推荐
相关产品推荐

