网关转发外部系统,出现了跨域了问题,由于网关中配置了所有接口跨域配置,所以怀疑是外部系统中也配置了跨域导致。
通过抓包请求,发起请求头中确实出现了相同的跨域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"
}
}