Laravel 5.5及更早版本需使用barryvdh/laravel-cors包,通过在config/app.php注册Barryvdh\Cors\ServiceProvider::class、发布并配置config/cors.php(如设置allowed_origins为具体域名、supports_credentials与allowed_origins不冲突)、在Kernel.php的api中间件组中添加\Barryvdh\Cors\Middleware\HandleCors::class来启用CORS。

在 Laravel 5(尤其是 5.5 及更早版本)中,官方未内置 CORS 支持,也不能直接使用 fruitcake/laravel-cors(该包要求 Laravel 6+)。必须使用兼容的 barryvdh/laravel-cors 包,并手动配置响应头——关键在于中间件注册、配置文件设置与响应头逻辑的协同,否则即使写了 Header 也不会生效。
确认 Laravel 5 版本并安装正确包
先执行:php artisan --version
若显示 Laravel Framework 5.5.x 或更低,请严格使用:
composer require barryvdh/laravel-cors- 切勿运行
fruitcake/laravel-cors,它在 Laravel 5.5 中无法注册服务提供者,配置不会加载
手动注册服务提供者和发布配置
打开 config/app.php,在 'providers' 数组末尾添加:
Barryvdh\Cors\ServiceProvider::class,
然后运行:
-
php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"(生成config/cors.php) -
php artisan config:clear && php artisan config:cache(确保新配置生效)
正确配置 config/cors.php 中的 Header 相关项
该文件直接控制最终响应头内容。重点配置以下几项(注意:生产环境禁用 *):
-
allowed_origins:必须写具体域名,如['http://localhost:3000', 'https://myapp.com'];若设为['*'],则supports_credentials必须为false -
allowed_methods:默认['*']即可,或明确列出['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'] -
allowed_headers:前端用到的自定义头都要列出来,如['Content-Type', 'X-Requested-With', 'Authorization', 'X-CSRF-TOKEN'];['*']在 Laravel 5.5 + barryvdh 包中支持但不推荐用于生产 -
supports_credentials:设为true时,前端需加credentials: 'include',且allowed_origins绝对不能是['*']
确保 HandleCors 中间件已启用且位置正确
在 app/Http/Kernel.php 中,将中间件加入 $middlewareGroups['api'](推荐)或全局 $middleware:
\Barryvdh\Cors\Middleware\HandleCors::class
特别注意:
– 不要把它放在认证中间件(如 auth:api)之后,否则预检请求(OPTIONS)可能被拦截;
– 若只希望 API 路由跨域,就只加在 'api' 组里,避免影响网页路由。


















