Laravel 10是否需额外中间件处理CORS?有无框架原生方案?
Laravel 10 原生启用CORS响应头(无需自定义中间件)
当然有原生方案,完全不用自己写中间件——Laravel自带的HandleCors中间件就是干这个的,只是默认没给API路由组启用而已,步骤如下:
- 在Kernel中注册CORS中间件
打开app/Http/Kernel.php,找到$middlewareGroups里的api数组,添加框架自带的HandleCors中间件:
protected $middlewareGroups = [ 'web' => [ // ... 其他原有中间件 ], 'api' => [ \Illuminate\Http\Middleware\HandleCors::class, // 新增这一行 \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
- 配置
config/cors.php
根据你的业务需求调整配置项,关键参数说明:
paths:指定需要应用CORS的路由范围,比如['api/*']匹配所有API路由allowed_origins:允许的请求源,['*']允许所有域名,或者指定具体域名如['https://your-frontend.com']allowed_methods:允许的HTTP请求方法,['*']允许所有,也可指定['GET', 'POST', 'PUT', 'DELETE']allowed_headers:允许的请求头,['*']允许所有exposed_headers:需要暴露给前端的响应头,比如['Authorization', 'Content-Type']supports_credentials:是否允许携带凭证(如Cookie),需设为true如果前端要传认证信息max_age:预检请求的缓存时间,单位秒,比如3600(1小时)
示例配置:
return [ 'paths' => ['api/*'], 'allowed_methods' => ['*'], 'allowed_origins' => ['*'], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => ['Authorization'], 'max_age' => 3600, 'supports_credentials' => true, ];
- 清除配置缓存
确保新配置立即生效,运行Artisan命令:
php artisan config:clear
完成以上步骤后,你的API路由响应就会自动带上符合配置的CORS头,完全基于框架原生实现,无需任何自定义中间件。之前网上很多教程绕远路,是因为没注意到Laravel已经把CORS逻辑封装在HandleCors中间件里,且和config/cors.php是直接绑定的。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

