gateway响应header去重处理

young 739 2022-04-28

网关转发外部系统,出现了跨域了问题,由于网关中配置了所有接口跨域配置,所以怀疑是外部系统中也配置了跨域导致。

通过抓包请求,发起请求头中确实出现了相同的跨域header。

查看gateway的官方文档,发现存在一个DedupeResponseHeaderFilter,它可以用来移除Response header中重复的key。

spring:
  cloud:
    gateway:
      routes:
      - id: dedupe_response_header_route
        uri: https://example.org
        filters:
        - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

接受一个name参数和一个可选strategy参数。name可以包含以空格分隔的标题名称列表。

strategy参数接受的值为RETAIN_FIRST(默认)、RETAIN_LAST、 和RETAIN_UNIQUE。

  • RETAIN_FIRST:默认值,保留第一个值
  • RETAIN_LAST:保留最后一个值
  • RETAIN_UNIQUE:保留所有唯一值,以它们第一次出现的顺序保留

项目中gateway采用nacos进行动态路由配置,并且格式为json,考虑保留第三方返回的header,所以相关配置为

{
  "name":"DedupeResponseHeader",
  "args":{
  	"name":"Access-Control-Allow-Credentials Access-Control-Allow-Origin",
    "strategy":"RETAIN_FIRST"
	}
}