Laravel 10跨域问题求助:请求资源缺少Access-Control-Allow-Origin头
解决Laravel POST请求跨域(No 'Access-Control-Allow-Origin' header)问题
确认CORS中间件已正确注册
Laravel的CORS处理由HandleCors中间件负责,打开app/Http/Kernel.php检查:- 若要全局生效,确保
\Illuminate\Http\Middleware\HandleCors::class在$middleware数组内; - 若仅针对API路由,确认它存在于
$middlewareGroups['api']数组中(默认Laravel已配置,可再核对)。
- 若要全局生效,确保
检查请求路径是否匹配
paths配置
你的cors.php里paths设为['api/*', 'sanctum/csrf-cookie'],如果POST请求的路径不在这个范围内(比如直接请求/form-submit而非/api/form-submit),Laravel不会处理跨域头。解决方法二选一:- 调整请求路径到
api/前缀下; - 将目标路径添加到
paths数组,例如:
'paths' => ['api/*', 'sanctum/csrf-cookie', 'form-submit'],- 调整请求路径到
清除配置缓存
修改cors.php后,Laravel的配置缓存可能没更新,导致新规则不生效。执行以下命令:php artisan config:clear php artisan cache:clear排查服务器层面的跨域拦截
如果应用部署在Nginx等服务器上,检查服务器配置是否干扰了Laravel的CORS头输出:- 避免在Nginx中手动设置
Access-Control-Allow-Origin,防止和Laravel的配置冲突; - 若服务器有自定义跨域规则,要么和Laravel的CORS配置保持一致,要么直接禁用服务器层面的跨域设置,交由Laravel中间件处理。
- 避免在Nginx中手动设置
带凭证请求的额外配置(按需)
如果请求需要携带Cookie或HTTP认证信息,需将supports_credentials改为true,同时前端请求要开启withCredentials(比如Axios中设置withCredentials: true)。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

