Spring Cloud Gateway 使用说明(4)-- HttpHeader Filters

8. HttpHeader Filters

在请求分发到下游前,会经过HttpHeadersFilters 处理,比如NettyRoutingFilter。

8.1 Forwarded Headers Filter

先介绍一下Forwarded header:

Forwarded 首部中包含了代理服务器的客户端的信息,即由于代理服务器在请求路径中的介入而被修改或丢失的信息。

语法

Forwarded: by=; for=; host=; proto=<http|https>

  1. < identifier >
    一个 identifier 显示了在使用代理的过程中被修改或者丢失的信息。它们可以是以下几种形式:
    一个IP地址(V4 或 V6,端口号可选,ipv6 地址需要包含在方括号里面,同时用引号括起来),
    语意不明的标识符(比如 “_hidden” 或者 “_secret”),
    或者是 “unknown”,当当前信息实体不可知的时候(但是你依然想要说明请求被进行了转发)。

  2. by= < identifier >
    该请求进入到代理服务器的接口。

  3. for=< identifier >
    发起请求的客户端以及代理链中的一系列的代理服务器。

  4. host=< host >
    代理接收到的 Host 首部的信息。

  5. proto=<http|https>
    表示发起请求时采用的何种协议(通常是 “http” 或者 “https”)。

示例


Forwarded: for="_mdn" 

# 大小写不敏感
Forwarded: For="[2001:db8:cafe::17]:4711"

# for proto by 之间可用分号分隔
Forwarded: for=192.0.2.60; proto=http; by=203.0.113.43

# 多值可用逗号分隔
Forwarded: for=192.0.2.43, for=198.51.100.17

Forwarded Headers Filter 会在请求发往下游前,创建一个Forwarded header。如果已经存在Forwarded header,则把当前请求的host,port,scheme添加到Forwarded header中

8.2 RemoveHopByHop Headers Filter

RemoveHopByHop Headers Filter 默认删除转发的请求中以下header:

  1. Connection
  2. Keep-Alive
  3. Proxy-Authenticate
  4. Proxy-Authorization
  5. TE
  6. Trailer
  7. Transfer-Encoding
  8. Upgrade

可以通过修改属性spring.cloud.gateway.filter.remove-non-proxy-headers.headers 指定要删除的header

8.3 XForwarded Headers Filter

先介绍一下X-Forwarded-*:

X-Forwarded-For (XFF) 在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。在消息流从客户端流向服务器的过程中被拦截的情况下,服务器端的访问日志只能记录代理服务器或者负载均衡服务器的IP地址。如果想要获得最初发起请求的客户端的IP地址的话,那么 X-Forwarded-For 就派上了用场。

HTTP 协议中的 Forwarded 是这个消息首部的标准化版本。
X-Forwarded-For 也是一个电子邮件相关协议中用到的首部,用来表示一封电子邮件是从其他账户转发过来的。

语法

X-Forwarded-For: < client >, < proxy1 >, < proxy2 >

指令

  1. < client >
    客户端的IP地址。
  2. < proxy1 >, < proxy2 >
    如果一个请求经过了多个代理服务器,那么每一个代理服务器的IP地址都会被依次记录在内。也就是说,最右端的IP地址表示最近通过的代理服务器,而最左端的IP地址表示最初发起请求的客户端的IP地址。

示例

X-Forwarded-For: 2001:db8:85a3:8d3:1319:8a2e:370:7348

X-Forwarded-For: 203.0.113.195

X-Forwarded-For: 203.0.113.195, 70.41.3.18, 150.172.238.178

XForwarded Headers Filter 在发向下游前可以创建一系列的X-Forwarded-* headers。它会使用当前请求的Host header, scheme, port 和path 去创建对应的headers。

通过下面的属性可以控制对应header的创建(默认为true):

  • spring.cloud.gateway.x-forwarded.for-enabled
  • spring.cloud.gateway.x-forwarded.host-enabled
  • spring.cloud.gateway.x-forwarded.port-enabled
  • spring.cloud.gateway.x-forwarded.proto-enabled
  • spring.cloud.gateway.x-forwarded.prefix-enabled

当header已经存在时,通过下面的属性控制是否添加值到对应的header(默认为true):

  • spring.cloud.gateway.x-forwarded.for-append
  • spring.cloud.gateway.x-forwarded.host-append
  • spring.cloud.gateway.x-forwarded.port-append
  • spring.cloud.gateway.x-forwarded.proto-append
  • spring.cloud.gateway.x-forwarded.prefix-append

Spring Cloud Gateway 2.2.3 官方使用说明(1)–路由
Spring Cloud Gateway 2.2.3 官方使用说明(2)-- 路由filter(上)
Spring Cloud Gateway 2.2.3 官方使用说明(2)-- 路由filter(下)
Spring Cloud Gateway 2.2.3 官方使用说明(3)-- Global filter

Spring Cloud Gateway 2.2.3 官方使用说明(4)-- HttpHeader Filters

Spring Cloud Gateway 2.2.3 使用说明(5)-- TLS 和 SSL
Spring Cloud Gateway 2.2.3 使用说明(6)-- 其它配置
Spring Cloud Gateway 2.2.3 使用说明(7)-- actuator
Spring Cloud Gateway 2.2.3 使用说明(8)-- 开发指导

Spring Cloud Gateway可以使用HttpHeader Filters来修改、添加或删除请求和响应中的HTTP头部信息。HttpHeader Filters可以在Spring Cloud Gateway的路由规则中定义,并按顺序执行。 例如,以下代码显示如何定义一个HttpHeader Filter,它将添加一个自定义的HTTP头部信息“X-Custom-Header”到请求中: ```java @Configuration public class HttpHeaderFilterConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/api/**") .filters(f -> f.addRequestHeader("X-Custom-Header", "custom-value")) .uri("http://localhost:8080")) .build(); } } ``` 在上述代码中,`addRequestHeader`方法用于添加一个HTTP头部信息,它的第一个参数是要添加的头部名称,第二个参数是头部的值。 除此之外,还有其他一些HttpHeader Filters可以使用,例如: - `addResponseHeader`:添加响应的HTTP头部信息; - `setRequestHeader`:设置请求的HTTP头部信息; - `setResponseHeader`:设置响应的HTTP头部信息; - `removeRequestHeader`:删除请求的HTTP头部信息; - `removeResponseHeader`:删除响应的HTTP头部信息。 这些方法的使用方式与`addRequestHeader`方法类似,只需将方法名替换为相应的方法名即可。 需要注意的是,HttpHeader Filters的执行顺序是按照它们在路由规则中定义的顺序进行的。因此,如果多个HttpHeader Filters都修改了同一个HTTP头部信息,那么最终的结果将是最后一个Filter修改的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiegwei

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

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

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

打赏作者

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

抵扣说明:

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

余额充值