connect-src 限制了 fetch 请求,怎么配置才生效?
我在项目里加了 CSP 的 connect-src 策略,但本地开发时用 fetch 请求后端接口一直被浏览器拦截,控制台报错说违反了策略。
我试过在 meta 标签里写:<meta http-equiv="Content-Security-Policy" content="connect-src 'self' https://api.example.com">,但好像没起作用,请求还是被拦了。是不是还要配别的?
这是我的请求代码:
fetch('https://api.example.com/data')
.then(res => res.json())
.then(data => console.log(data));
1. CSP meta 标签有时会失效,特别是开发时热更新或者页面部分刷新的情况下。彻底关掉浏览器标签页再重新打开试试。
2. 缺少 default-src fallback。有些浏览器需要你显式指定 default-src,否则其他指令可能不生效。在 content 里加一行
default-src 'self' https://api.example.com;试试。3. 实际请求的完整 URL。你的 fetch 是
https://api.example.com/data,配置里也写了https://api.example.com,理论上应该放行。但如果请求时带了端口号或者走了不同的协议,可能也会被拦。4. 浏览器缓存问题。Chrome 容易缓存旧的 CSP 策略,开发者工具里打开 Network 面板,勾选 "Disable cache" 同时勾选 "Disable HTTP cache",或者直接用无痕模式测试。
5. 更稳妥的写法:
如果还是不行,打开浏览器控制台的安全标签页或者 Console 里的 CSP 警告信息,一般会告诉你具体哪条规则把请求拦了,按提示调整就行。
开发阶段实在搞不定的话,可以先把 connect-src 改成
*临时放行,上线前再收紧:1. 用完整CSP写法,别只写connect-src:
2. 检查请求URL是否完全匹配,包括协议和子域名