Laravel 10需手动配置CORS权限,核心是编辑config/cors.php设置paths、allowed_origins(禁用'*')、allowed_methods等,并将\Fruitcake\Cors\HandleCors::class加入$middlewareGroups['api']。

一、确认并发布 CORS 配置文件
即使 Laravel 10 内置支持,你仍需一个可编辑的配置文件来定义权限:
- 运行命令生成 config/cors.php:
php artisan vendor:publish --tag=cors - 该文件是权限策略的唯一来源,所有跨域行为都由此驱动。
二、在 config/cors.php 中精确设置权限项
打开 config/cors.php,重点修改以下键值(生产环境务必避免用 * 开放全部):
-
paths:指定哪些路由路径启用 CORS 权限(推荐只开 API)
→ 建议设为['api/*', 'sanctum/csrf-cookie'] -
allowed_origins:明确允许的前端域名
→ 开发时可用['http://localhost:3000', 'http://localhost:5173']
→ 生产必须写具体域名,如['https://app.yoursite.com', 'https://admin.yoursite.com']
→ ❌ 禁止设为['*'](除非不带 credentials) -
allowed_methods:允许的 HTTP 方法
→ 可设['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']或['*'] -
allowed_headers:允许客户端发送的请求头
→ 常见:['Content-Type', 'Authorization', 'X-Requested-With', 'Accept']
→ 也可用['*'](部分代理或旧浏览器可能不兼容) -
supports_credentials:是否允许携带 Cookie / Session / Authorization Bearer
→ 若设为true,则allowed_origins绝对不能是['*'],否则浏览器拒绝请求 -
exposed_headers(可选):指定哪些响应头可被前端 JS 读取(如
X-RateLimit-Limit)
三、确保中间件已正确注册
CORS 权限要生效,中间件必须挂载到对应请求生命周期中:
- 打开 app/Http/Kernel.php
- 若希望**所有请求**(含 Web 页面)受控 → 加入全局中间件:
\Fruitcake\Cors\HandleCors::class 到$middleware数组 - 更推荐(尤其前后端分离项目)→ 只对 API 路由启用:
将 \Fruitcake\Cors\HandleCors::class 加入$middlewareGroups['api']数组
四、配合 Sanctum(如使用会话认证)
如果你用 Laravel Sanctum 做登录态管理(比如 Vue/React 前端调用 /api/user),还需额外注意:
- 确保
config/sanctum.php中的stateful域名列表包含你的前端地址(如['localhost:3000']) - 该配置与
cors.allowed_origins必须一致,否则 CSRF 保护或 session 会失败 - 前端请求需带上
withCredentials: true,后端supports_credentials => true才能传递 Cookie


















