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

四、解决方案

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

相关推荐
提子拌饭1332 小时前
风息时钟:鸿蒙Flutter 实现的自然风格时钟应用
flutter·华为·架构·开源·harmonyos
一定要AK5 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao5 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao6 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
科技小花6 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
2501_948114246 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
迷藏4946 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
FserSuN6 小时前
LangChain DeepAgent 多 Agent 架构原理学习
架构·langchain
坏孩子的诺亚方舟6 小时前
RTL设计师攻略0_架构与微架构
架构·cpu·面试攻略
智星云算力6 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用