Laravel 11 配置 CORS 的核心是注册 fruitcake/laravel-cors 的 HandleCors 中间件:先执行 composer require fruitcake/laravel-cors 和 php artisan vendor:publish --tag="cors",再将 \Fruitcake\Cors\HandleCors::class 加入 app/Http/Kernel.php 的 $middleware 数组最前面,并在 config/cors.php 中正确配置 paths、allowed_origins、supports_credentials 等项。

在 Laravel 11 中配置 CORS,核心是正确注册并启用 Fruitcake\LaravelCors\HandleCors 中间件。它不是手动写一个新中间件,而是使用官方推荐的成熟扩展包,通过全局或分组方式注入请求生命周期。
安装与注册中间件
确保已安装 fruitcake/laravel-cors(Laravel 11 兼容):
- 运行
composer require fruitcake/laravel-cors - 执行
php artisan vendor:publish --tag="cors"生成config/cors.php - 打开
app/Http/Kernel.php,将中间件加到$middleware数组最前面(必须靠前,早于其他中间件如认证、CSRF):
protected $middleware = [
\Fruitcake\Cors\HandleCors::class,
// 其他中间件...
];
```
关键配置项说明(config/cors.php)
中间件行为完全由该文件控制,重点关注以下几项:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
paths:指定哪些路由路径启用 CORS,例如
['api/*', 'sanctum/csrf-cookie'],避免对静态资源或 Web 页面误开 -
allowed_origins:开发环境可设为
['http://localhost:5173', 'http://localhost:3000'];生产环境务必写具体域名,禁用['*'](尤其开启 credentials 时) -
supports_credentials:若前端需携带 Cookie 或 Authorization 头,必须设为
true,此时allowed_origins不能为* -
allowed_headers:建议设为
['*']或显式列出['Content-Type', 'X-Requested-With', 'Authorization']
验证是否生效
启动开发服务器后,用浏览器开发者工具检查任意 API 响应头:
- 应看到
Access-Control-Allow-Origin: http://localhost:5173(值与配置匹配) - 若有凭证请求,还应有
Access-Control-Allow-Credentials: true - 预检请求(OPTIONS)应返回 200,且含
Access-Control-Allow-Methods等头
常见问题处理
如果仍报跨域错误,优先排查:
- 中间件是否放在
$middleware最顶部?靠后会导致被其他中间件拦截或跳过 - 请求 URL 是否命中
paths配置?比如访问/api/v1/users但paths写的是['v1/*']就不生效 - 是否同时启用了 Nginx/Apache 的 CORS 规则?服务端重复设置可能冲突,建议只留 Laravel 一层控制
- 使用 Sanctum 或 Passport 时,确保
sanctum/csrf-cookie在paths中,否则 CSRF 预检失败










