【Java 单体架构改造 微服务 网关遇坑之 跨域配置】

一、概述

跨域是大家很熟悉的一个问题,在单体架构中,我们一般只需要在服务端配置好跨域请求头即可解决浏览器的跨域问题。但是我最近在将原来的单体架构改造成微服务架构,在部署网关时,发现浏览器一直报跨域。

二、问题:我在网关项目已经配置了跨域,但是浏览器还是一直报跨域的错误

三、问题原因

通过分析发现原因在于

重复的 Access-Control-Allow-Origin 头部

响应头中出现了两个 Access-Control-Allow-Origin 头部:

text

Access-Control-Allow-Origin: https:// **********.cn

Access-Control-Allow-Origin: https:// **********.cn

而CORS 规范要求:

Access-Control-Allow-Origin 头部只能有一个值

可以是一个具体的源(如 https://example.com

或者是通配符 *(但使用通配符时不能带凭证)

绝对不能出现两个或多个相同的 CORS 头部

根据以上的原因,我想到了,我原先的单体架构业务服务里面就有配置了跨域,然后我在网关服务里面也配置了跨域,所以浏览器将请求打到网关服务的时候,请求头会加上一个跨域配置项Access-Control-Allow-Origin,然后由网关转发到业务服务的时候又回添加上一个跨域配置项,所以就会出现两个 Access-Control-Allow-Origin 项,导致浏览器收到两个跨域配置项:Access-Control-Allow-Origin,最终导致浏览器报跨域的错误。

四、解决方案

取消原先业务服务的跨域配置项即可,去掉后,浏览器正常调用接口。

相关推荐
10mAh1 分钟前
【Linux】error while loading shared libraries 怎么解决?——ldd、RPATH 与动态链接排错
java·linux·前端
深念Y6 分钟前
stable-diffusion.cpp 的 FLUX.2 Klein 9B 分步
java·前端·数据库
阿pin16 分钟前
Java随笔-红黑树
java·python·算法·红黑树
woshihuanglaoshi20 分钟前
鸿蒙老旧项目升级改造高级:API废弃迁移/ArkTS语法升级/架构重构策略/增量迁移/风险管控方案
学习·华为·重构·架构·harmonyos·鸿蒙
我命由我1234524 分钟前
Jetpack Compose - @Preview 注解
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
为美好的生活献上中指28 分钟前
Spring AI Advisor 深度实战:构建严谨的 AI Agent 拦截链
java·人工智能·spring·advisor·aiagent
ruofu3331 分钟前
如何让docker使用提前下载好的镜像,而不是在线拉取
java·spring cloud·docker
爱敲键盘的猴子31 分钟前
深入理解 Spring IoC -- 基于 XML 的 Bean 配置详解
xml·java·spring
艾莉丝努力练剑38 分钟前
【Qt:问题解决】Qt程序入口点错误修复:MinGW ABI兼容问题
java·服务器·开发语言·qt·文件系统·动静态库
程序员黑豆8 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程