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 出现了多个值(不管两个值相同还是不同浏览器目前都会报错),截图如下:

 

解决该问题的思路:

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

解决方法:在application.properties或bootstrap.properties配置文件中添加如下的配置

# 这一段配置是处理跨域的
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

 

 

posted @ 2022-05-11 10:05  LilLazy  阅读(478)  评论(0编辑  收藏  举报