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

四、解决方案

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

相关推荐
thefool1122666 分钟前
多线程 4
java
WeiXin_DZbishe17 分钟前
基于微信小程序的本地闲置物品交易平台-计算机毕设 附源码【课程设计】26825
vue.js·spring boot·python·微信小程序·架构·php·课程设计
Rain的Java大神之路22 分钟前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程
高级程序源43 分钟前
springboot大学生体测系统72170-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
IT研究室1 小时前
最新计算机毕业设计选题推荐-基于spring boot的文学名著分享系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
denlaku1 小时前
JDK 13 新特性详解
java·开发语言
秋饼1 小时前
Java 后端企业级 LLM 网关实战:Spring Cloud Gateway 构建统一大模型接入层
java·ai·技术分享·后端开发
码云之上1 小时前
Prompt 拦不住 Chatbot 的安全问题:九大风险与分层防护
人工智能·架构·全栈
对讲机数码科普1 小时前
从电路原理到协议栈:模拟对讲机与数字对讲机的技术内核拆解
运维·网络·架构·软件工程
一个有温度的技术博主1 小时前
单点登录(SSO)到底怎么实现?怎么判断用户是否已单点登录?
架构