Laravel 6需通过fruitcake/laravel-cors处理OPTIONS预检请求,安装后在bootstrap/app.php中append HandleCors中间件,发布并正确配置config/cors.php的paths(如['api/*'])、allowed_origins与supports_credentials协同设置,确保预检请求被拦截并返回含Access-Control-Allow-Origin等头的响应。

Laravel 6 默认不自动处理 OPTIONS 预检请求,必须通过正确配置 CORS 中间件来响应,否则会出现 404 或无响应,导致前端跨域失败。
确保已安装并启用 fruitcake/laravel-cors
这是 Laravel 6 官方推荐的 CORS 解决方案(当时尚未集成进核心):
- 运行
composer require fruitcake/laravel-cors - 在
bootstrap/app.php的withMiddleware回调中追加中间件:$middleware->append(\Fruitcake\Cors\HandleCors::class); - 执行
php artisan vendor:publish --tag="cors"生成config/cors.php
关键:paths 必须匹配 OPTIONS 请求路径
中间件只对 config/cors.php 中 paths 列表里声明的路由生效。若前端请求的是 /api/users,但配置中写的是 ['/v1/*'],则 OPTIONS 请求不会被拦截和响应。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 常见写法:
'paths' => ['api/*', 'sanctum/csrf-cookie'] - 注意:Laravel 路由前缀(如
api)需与实际请求路径一致 - 若使用了自定义 API 前缀(如
v1),必须显式加入 paths
allowed_origins 与 supports_credentials 要协同设置
这两项直接影响 OPTIONS 响应头是否合法:
- 若
supports_credentials => true(如需传 Cookie 或 Authorization),allowed_origins不能为['*'],必须指定具体域名,例如['http://localhost:3000'] - 若仍用
['*']且启用了凭证,浏览器会直接拒绝,控制台报错 “The value of the 'Access-Control-Allow-Origin' header must not be the wildcard '*' when the request's credentials mode is 'include'” - 开发阶段可临时设为
['http://localhost:*']匹配任意本地端口
验证 OPTIONS 是否真正被中间件接管
不要仅靠浏览器 Network 面板看状态码,要确认响应头是否包含 CORS 字段:
- 发起一个真实 OPTIONS 请求(可用 curl 或 Postman):
curl -X OPTIONS http://your-app.test/api/test -H "Origin: http://localhost:3000" -I - 成功响应应含:
Access-Control-Allow-Origin: http://localhost:3000Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONSAccess-Control-Allow-Headers: * - 若返回 404 或缺失这些头,说明中间件未触发——检查路由是否存在、paths 是否匹配、中间件是否注册在全局而非局部










