Laravel 10 CORS配置未生效,跨域请求遭拦截问题求助
问题排查与解决方法
1. 确保Allowed Origins包含完整协议头
浏览器发送的Origin是带http://或https://的完整域名,你的allowed_origins配置仅填写了域名,缺少协议导致匹配失败。修改config/cors.php:
'allowed_origins' => [ 'https://example1.com', 'https://example2.com', ],
若需同时支持HTTP和HTTPS,可改用正则匹配:
'allowed_origins_patterns' => [ '/^https?:\/\/example1\.com$/', '/^https?:\/\/example2\.com$/', ],
2. 调整CORS中间件执行顺序
将HandleCors中间件移至全局中间件数组的最顶部,确保它在所有其他中间件之前执行(若其他中间件提前返回响应,CORS头将无法被添加)。修改App\Http\Kernel.php:
protected $middleware = [ \Illuminate\Http\Middleware\HandleCors::class, // 移至最前 // 其他中间件... ];
3. 清除配置缓存
修改配置文件后必须清除Laravel配置缓存,否则旧配置会持续生效:
php artisan config:clear
4. 检查服务器层面的CORS设置
若应用部署在Nginx、Apache等服务器上,需确认服务器未配置独立的CORS规则(比如Nginx的add_header Access-Control-Allow-Origin),这类规则会覆盖Laravel中间件的设置。如有,需移除或调整服务器配置,交由Laravel的CORS中间件处理。
5. 验证路由缓存与路径匹配
虽然你设置了paths => ['*'],仍需确认请求的/my-endpoint未被路由分组中间件排除,可清除路由缓存确保配置生效:
php artisan route:clear
内容的提问来源于stack exchange,提问作者chishiki
相关产品推荐
相关产品推荐

