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

Laravel API遭CORS拦截求助:已装fruitcake/laravel-cors仍未解决

解决Laravel API CORS拦截问题(已安装fruitcake/laravel-cors仍无效)

1. 确认中间件注册位置

打开app/Http/Kernel.php,检查\Fruitcake\Cors\HandleCors::class的注册位置:

  • 全局启用:必须将其放在$middleware数组的最顶部,确保所有请求都经过CORS处理:
protected $middleware = [
    \Fruitcake\Cors\HandleCors::class,
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    // 其他中间件...
];
  • 仅API路由组启用:在$middlewareGroups的api组内添加该中间件:
protected $middlewareGroups = [
    'api' => [
        \Fruitcake\Cors\HandleCors::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

2. 配置CORS规则

如果未发布过配置文件,先运行命令生成config/cors.php:

php artisan vendor:publish --tag="cors"

修改配置文件,根据实际需求调整规则:

return [
    'paths' => ['api/*'], // 匹配你的API路由前缀
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'], // 开发环境可临时用*,生产环境指定具体域名
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'], // 包含自定义头如Authorization时,可明确列出或用*
    'exposed_headers' => [],
    'max_age' => 3600,
    'supports_credentials' => false, // 需要携带Cookie时设为true
];

3. 清除Laravel缓存

修改配置后必须清除缓存,否则新规则不会生效:

php artisan config:clear
php artisan route:clear
php artisan cache:clear

4. 检查服务器代理配置(Nginx/Apache)

如果用Nginx部署,需确保配置不会覆盖Laravel返回的CORS头:

location / {
    if ($request_method = OPTIONS) {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
        add_header Access-Control-Allow-Headers "Content-Type, Authorization";
        return 204;
    }
}

Apache则在.htaccess中添加:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"

5. 验证OPTIONS预检请求

前端复杂请求(带自定义头、PUT/DELETE方法)会先发送OPTIONS预检请求,通过浏览器控制台网络面板检查:

  • 确保OPTIONS请求返回200/204状态码
  • 响应头包含Access-Control-Allow-Origin等正确CORS字段

6. 排查中间件冲突

临时禁用自定义或第三方中间件,测试是否有中间件修改/移除了CORS响应头,比如权限验证中间件返回错误时未携带CORS头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:51:34