【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,最终导致浏览器报跨域的错误。

四、解决方案

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

相关推荐
步行cgn3 小时前
Spring c 命名空间注入详解
java·后端·spring
Web3&Basketball4 小时前
CRM Agent 后训练实战:3 倍更少错误
python·架构·大模型·agent·推理
明月_清风4 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
aramae4 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路5 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog5 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog5 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
Ivanqhz6 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
qq_2518364577 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
caoerzhong7 小时前
JeeWMS 开源仓库管理系统全景解读:一套 Java WMS 如何把 WMS/OMS/BMS/TMS 装进同一个系统
java·开源