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

Laravel8出现CORS错误:Access-Control-Allow-Origin含多个*值如何解决?

问题本质

该错误的核心原因是接口响应头中Access-Control-Allow-Origin被重复添加了两次*值,浏览器CORS策略要求该响应头仅能存在一个有效值,因此直接拦截了请求。

排查步骤
  • 首先检查Laravel 8自带CORS扩展配置:Laravel 8默认集成fruitcake/laravel-cors扩展,打开config/cors.php文件,先确认paths配置是否覆盖了你的api/objectives接口路径,再检查allowed_origins是否存在重复配置的*项。
  • 其次检查Web服务配置:查看Nginx/Apache的站点配置中,是否手动添加了add_header Access-Control-Allow-Origin *;规则,如果框架层面已经处理跨域,服务层再加就会出现头重复的问题。
  • 然后检查项目自定义中间件:查看全局中间件或者api路由组绑定的中间件中,有没有自己手写代码添加header('Access-Control-Allow-Origin: *');的逻辑,也会和框架自带CORS配置冲突。
  • 最后检查中间层配置:如果有用反向代理、CDN服务,确认这些中间层有没有额外添加跨域响应头。
解决方法
  1. 优先使用Laravel自带CORS配置处理跨域,参考正确配置如下:
// config/cors.php
return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => false,
];

如果接口需要跨域携带Cookie,需要将supports_credentials改为true,同时allowed_origins不能设置为*,要填写明确的允许源,比如['http://localhost:4200']。

  1. 移除其他所有位置的重复跨域头配置:包括Web服务配置、自定义中间件、反向代理层的额外跨域头规则,全局仅保留一处跨域配置即可。

  2. 配置修改后执行php artisan config:clear清理Laravel配置缓存,重启Web服务后再测试请求即可。

内容的提问来源于stack exchange,提问作者Shadrack Okran Arthur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:06:00