laravel 7需手动配置fruitcake/laravel-cors包:安装后发布config/cors.php,设置allowed_origins等参数,并在kernel.php的$middlewaregroups['api']中注册\fruitcake\cors\handlecors::class中间件。

Laravel 7 默认不内置 CORS 支持,需借助第三方包。fruitcake/laravel-cors 是当时最主流、官方推荐的解决方案(Laravel 8.2+ 才集成 laravel/sanctum 或原生 cors 配置,但 Laravel 7 必须用 fruitcake)。
它轻量、稳定、与 Laravel 7 兼容良好,且配置直观,不是“装了就完事”,而是需要正确启用中间件和发布配置。
✅ 安装与基础配置
运行命令安装:
composer require fruitcake/laravel-cors
Laravel 7 使用的是 自动服务提供者发现(5.5+ 开始支持),所以一般无需手动在 config/app.php 中注册。但为保险起见,可确认 Fruitcake\Cors\ServiceProvider::class 是否已在 config/app.php 的 providers 数组中(通常 Composer 安装后会自动添加)。
接着发布配置文件(非必须,但强烈建议):
php artisan vendor:publish --provider="Fruitcake\Cors\ServiceProvider"
这会在 config/cors.php 生成配置文件,内容类似:
return [
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];
⚠️ 注意:
allowed_origins设为['*']时,不能同时开启supports_credentials => true(比如带 Cookie 登录),否则浏览器会拒绝响应。如需鉴权,应明确指定来源,例如['https://admin.example.com', 'http://localhost:3000']。
✅ 启用中间件(关键步骤)
fruitcake 提供两个中间件:
-
HandleCors::class—— 全局启用(推荐用于 API 路由) -
Cors::class—— 可按需绑定到单个路由或控制器
方式一:全局启用(适用于 api.php)
打开 app/Http/Kernel.php,在 $middlewareGroups['api'] 数组中确保 HandleCors::class 在最前面(顺序很重要,必须早于 auth:api 等):
'api' => [
\Fruitcake\Cors\HandleCors::class, // ← 必须放这里!
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
✅ 这样所有
routes/api.php下的路由都会自动加 CORS 响应头。
方式二:局部启用(适用于 web.php 中特定接口)
Route::get('/public-data', [DataController::class, 'index'])
->middleware(\Fruitcake\Cors\HandleCors::class);
✅ 验证是否生效
发起一个跨域请求(如前端用 fetch 访问 http://localhost:8000/api/items),检查响应头中是否包含:
Access-Control-Allow-Origin: http://localhost:3000 Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Headers: Content-Type, X-Requested-With
若看到这些头,说明配置成功;若仍报跨域错误,请检查:
- 是否请求发到了
api/路由(而非web/)?web组默认没配HandleCors -
.env中APP_URL是否与前端域名一致?部分中间件逻辑会参考它 - 浏览器控制台是否显示预检(OPTIONS)失败?检查
allowed_methods和allowed_headers是否宽松匹配
❌ 常见误区提醒
- 不要以为
composer require后就自动生效 —— 必须配置中间件 - 不要在
web中间件组里盲目加HandleCors,它可能干扰 Session 和 CSRF 机制 -
allowed_origins => ['*']+supports_credentials => true是无效组合,直接被浏览器拦截 - 修改
config/cors.php后,无需config:clear(该文件不走 Laravel 配置缓存),但改了中间件注册需重载 autoload(一般不用操作)
不复杂但容易忽略。











