Skip to content

RewriteResponseHeader GatewayFilter 工厂

RewriteResponseHeader GatewayFilter 工厂接受 name(名称)、regexp(正则表达式)和 replacement(替换值)参数。 它使用 Java 正则表达式提供了一种灵活的方式来重写响应头的值。

以下示例配置了一个 RewriteResponseHeader GatewayFilter:

示例 1. application.yml

yaml
spring:
  cloud:
    gateway:
      routes:
      - id: rewriteresponseheader_route
        uri: https://example.org
        filters:
        - RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***

作用: 对于响应头值为 /42?user=ford&password=omg!what&flag=true 的情况,在发出下游请求后,它会被设置为 /42?user=ford&password=***&flag=true

注意: 由于 YAML 规范的限制,你必须使用 $\ 来表示 $

补充教学 —— 为什么要重写响应头?

场景 1:隐藏敏感信息(安全合规)

  • 后端现状:某些遗留服务会在响应头的 Location 字段中包含敏感参数,例如重定向 URL 里的 passwordtokensessionId
  • 安全要求:这些敏感信息不应该暴露给客户端或经过代理服务器。
  • 网关处理:使用 RewriteResponseHeader 将敏感参数替换为占位符(如 ***),确保即使响应头被记录或转发,也不会泄露敏感信息。
    • 响应头:Location: /42?user=ford&password=omg!what&flag=true
    • 修改后:Location: /42?user=ford&password=***&flag=true

场景 2:修正响应头格式(兼容性修复)

  • 问题:某些后端服务返回的响应头格式不符合标准,例如 X-Response-Red 字段中包含了多余的空格或特殊字符。
  • 需求:前端或客户端期望的是标准化的格式。
  • 网关修正:通过正则表达式匹配并替换,将响应头格式化为前端期望的样子。
    • 例如:将 X-Response-Red: value1, value2, value3 中的多余空格去除
    • 配置:RewriteResponseHeader=X-Response-Red, ,\s+, ,
    • 结果:X-Response-Red: value1,value2,value3

场景 3:动态替换域名(环境适配)

  • 场景:在开发、测试、生产环境中,后端服务返回的响应头中可能包含硬编码的域名。
  • 需求:需要根据当前环境动态替换响应头中的域名。
  • 网关处理:使用正则表达式匹配旧域名并替换为新域名。
    • 配置:RewriteResponseHeader=Location, https://old-domain.com, https://new-domain.com
    • 响应头:Location: https://old-domain.com/api/resource
    • 修改后:Location: https://new-domain.com/api/resource

Based on Spring Framework.