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

Laravel 10是否需额外中间件处理CORS?有无框架原生方案?

Laravel 10 原生启用CORS响应头(无需自定义中间件)

当然有原生方案,完全不用自己写中间件——Laravel自带的HandleCors中间件就是干这个的,只是默认没给API路由组启用而已,步骤如下:

  1. 在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,
    ],
];
  1. 配置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,
];
  1. 清除配置缓存
    确保新配置立即生效,运行Artisan命令:
php artisan config:clear

完成以上步骤后,你的API路由响应就会自动带上符合配置的CORS头,完全基于框架原生实现,无需任何自定义中间件。之前网上很多教程绕远路,是因为没注意到Laravel已经把CORS逻辑封装在HandleCors中间件里,且和config/cors.php是直接绑定的。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:35:15