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

三、问题原因
通过分析发现原因在于
重复的 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,最终导致浏览器报跨域的错误。
四、解决方案
取消原先业务服务的跨域配置项即可,去掉后,浏览器正常调用接口。