Strapi V4中因Access-Control-Allow-Origin头重复设置引发CORS错误
解决Strapi 4.15.5中Access-Control-Allow-Origin重复的CORS错误
针对你遇到的Access-Control-Allow-Origin响应头重复导致的CORS错误,可按以下步骤排查解决:
1. 确认中间件配置未重复加载strapi::cors
打开config/middlewares.js,检查文件中是否仅存在一处strapi::cors配置。重复添加该中间件会导致多次设置CORS头,引发重复值问题。
正确的中间件配置示例:
export default [ 'strapi::errors', { name: 'strapi::security', config: { contentSecurityPolicy: { useDefaults: true, directives: { 'connect-src': ["'self'", 'https:'], }, }, }, }, { name: 'strapi::cors', config: { origin: 'https://xxx.yyy.com', }, }, 'strapi::poweredBy', 'strapi::logger', 'strapi::query', 'strapi::body', 'strapi::session', 'strapi::favicon', 'strapi::public', ];
2. 检查反向代理(如Nginx)是否额外设置CORS头
如果你的Strapi服务通过Nginx等反向代理部署,需确认代理配置中是否手动添加了Access-Control-Allow-Origin头。若代理层和Strapi同时设置该头,就会出现重复值。
处理方式:要么删除代理配置中的CORS头(交由Strapi统一处理),要么在代理层统一配置所有CORS规则,同时移除Strapi中的strapi::cors配置。
3. 排查自定义中间件或插件的冲突
- 检查
src/middlewares/目录下的自定义中间件,确认没有手动添加Access-Control-Allow-Origin响应头的代码。 - 排查已安装的Strapi插件,部分第三方插件可能自带CORS逻辑,与官方
strapi::cors中间件冲突。
4. 清除缓存并重启服务
执行以下操作确保配置生效:
npm run build npm run develop # 生产环境可替换为对应的启动命令
旧缓存可能导致修改后的配置未正确加载,引发重复头问题。
5. 验证响应头来源
通过浏览器开发者工具的Network面板,查看请求的响应头详情:
- 确认两个重复的
Access-Control-Allow-Origin头的具体来源,对比不同配置下的变化,定位是Strapi内部还是代理层的问题。
内容的提问来源于stack exchange,提问作者Bijan Kundu
相关产品推荐
相关产品推荐

