Laravel 8与Angular跨域名部署偶发CORS错误如何解决?
可行解决方案
核心问题根因
你当前出现偶发CORS报错的核心原因是自定义CORS中间件逻辑缺陷,且禁用了Laravel 8官方自带的跨域处理组件,具体问题有两个:
- 自定义中间件先执行后续业务逻辑再添加CORS头,遇到
OPTIONS预检请求、业务抛出异常/错误码时,CORS头不会被添加到响应中,直接触发跨域拦截 - 简单GET/POST请求不需要预检可正常返回,带自定义头的非简单请求需要预检就失败,所以表现为"有时正常有时报错"
具体操作步骤
- 移除自定义CORS中间件
- 删除
app/Http/Middleware/CORS.php文件 - 打开
app/Http/Kernel.php,从全局中间件数组中删掉\App\Http\Middleware\CORS::class这一行
- 启用官方跨域处理组件
- 取消
app/Http/Kernel.php全局中间件里\Fruitcake\Cors\HandleCors::class的注释,并且将它调整到全局中间件的第一行,确保所有请求(包括预检、异常响应)都会先经过CORS处理,调整后全局中间件示例如下:
protected $middleware = [ \Fruitcake\Cors\HandleCors::class, // 放到最顶部 // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ];
配置验证
你当前的config/cors.php配置已经符合要求,无需额外修改;如果后续需要在跨域请求中携带认证Cookie,再将supports_credentials改为true,同时前端请求开启withCredentials即可。清除缓存生效
执行以下命令清除Laravel配置、路由缓存,避免旧配置残留:
php artisan config:clear php artisan route:clear
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

