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

四、解决方案

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

相关推荐
qq_12498707532 小时前
基于Java的心理测试系统的设计与实现(源码+论文+部署+安装)
java·开发语言·vue.js·spring boot·计算机毕设·计算机毕业设计
拽着尾巴的鱼儿2 小时前
Spring定时任务 Scheduled使用
java·后端·spring
沉默-_-2 小时前
力扣hot100双指针专题解析2(C++)
java·c++·算法·蓝桥杯·双指针
Jaxson Lin2 小时前
Java编程进阶:智能仿真无人机项目1.0
java·开发语言
sheji34162 小时前
【开题答辩全过程】以 实验室设备管理系统为例,包含答辩的问题和答案
java
江君是实在人2 小时前
java 面试题 redis 处理大key问题
java·开发语言·redis
Filotimo_2 小时前
Spring MVC 注解家族
java
Fnetlink12 小时前
零信任架构在移动办公中的应用与安全保障
安全·架构
禁默2 小时前
Portainer:让 Docker 管理变简单,用cpolar突破局域网后协作更轻松
java·docker·容器·cpolar