Spring Cloud Gateway 处理重复Header的方法(CORS policy: The ‘Access-Control-Allow-Origin‘ header has a……

问题现状
首先发现问题的原始点是浏览器进行 ajax 请求的时候出现跨域问题,经查看请求报文和错误确定是 Access-Control-Allow-Origin 出现了多个值(浏览器目前是不允许的),其原因是是在 gateway 中配置过了 Access-Control-Allow-Origin,后端服务的开发人员也配置了 Access-Control-Allow-Origin,导致 response 在响应的时候 Access-Control-Allow-Origin 出现了多个值(不管两个值相同还是不同浏览器目前都会报错),截图如下:
在这里插入图片描述

解决该问题的思路:

  • 可以将所有后端服务的跨域处理都去除,交网关统一处理
  • 可以将网关的处理去除(那么后端所有服务都需要添加)
  • 在网关做去重处理,只保留一个值响应给浏览器(这是本文选择的处理方法

解决方法
请先确定你使用版本的 gateway 中是否有 DedupeResponseHeaderGatewayFilterFactory 类,其实看完这句话,正常来说你会看一下这个类的代码,那么不出意外的话你应该已经知道怎么做了。
下面是具体的配置示例:

# 这一段前面的配置是处理跨域的,本文处理重复header的请看最后一条配置
spring.cloud.gateway.globalcors.cors-configurations.[/**].allow-credentials=true
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-headers[0]=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-methods[0]=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-origins[0]=http://localhost:8080
spring.cloud.gateway.globalcors.cors-configurations.[/**].max-age=1800
# 相同header多个值时的处理方式,三种规则可选(RETAIN_FIRST|RETAIN_UNIQUE|RETAIN_LAST)
spring.cloud.gateway.default-filters[0]=DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST

如上三种可选规则的含义:顾名思义

注:本文虽然是以跨域问题为例并提供了解决方法,实际上 DedupeResponseHeader 是可以处理任意Header的,并不局限于跨域Header的处理。


(END)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catoop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值