HTTP Header 修改
原文:https://gateway-api.sigs.k8s.io/guides/user-guides/http-header-modifier/
HTTPRoute 资源 可以修改 HTTP 请求的 Header 以及客户端接收到的 HTTP 响应的 Header。为满足这些需求,Gateway API 提供了两种 filter:RequestHeaderModifier 和 ResponseHeaderModifier。
本指南展示如何使用这些功能。
注意:这些功能可以组合使用。单个 HTTPRoute 资源 即可同时修改入向请求的 Header 和对应响应的 Header。
HTTP 请求 Header 修改
HTTP Header 修改的过程是:在入向请求中新增、移除或修改 HTTP Header。
要配置 HTTP Header 修改,需要定义一个 Gateway 对象 + 一个或多个 HTTP filter。每个 filter 指明要对入向请求做的具体修改,例如添加自定义 Header、修改已有 Header 等。
要新增一个 HTTP 请求 Header,使用类型为 RequestHeaderModifier 的 filter,配合 add 动作以及 Header 的名称和值:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: header-http-echo
spec:
parentRefs:
- name: acme-gw
rules:
- matches:
- path:
type: PathPrefix
value: /add-a-request-header
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
add:
- name: my-header-name
value: my-header-value
backendRefs:
- name: echo
port: 8080要无条件设置 Header 的值,使用 set。无论 Header 是否已经存在,都会被覆盖为所提供的值。
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
set:
- name: my-header-name
value: my-new-header-valueHeader 也可以被移除,使用 remove 关键字 + 要移除的 Header 名称列表。
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
remove: ["x-request-id"]上面这段示例会从 HTTP 请求中移除 x-request-id Header。
HTTP 响应 Header 修改
正如编辑请求 Header 一样有用,编辑响应 Header 同样很有用。例如,它允许团队只为某个特定后端添加/移除 cookie,这有助于识别此前被重定向到该后端的某些用户。
另一个潜在的使用场景是:当你的前端需要判断它正在通信的是后端服务器的稳定版还是测试版时,可以借助响应 Header 实现——前端据此渲染不同 UI 或调整响应解析逻辑。
修改 HTTP 响应 Header 的语法与修改请求 Header 几乎一致,只是使用的 filter 不同(ResponseHeaderModifier)。
Header 同样可以新增、编辑、移除。下面这个示例演示了如何一次性新增多个 Header:
filters:
- type: ResponseHeaderModifier
responseHeaderModifier:
add:
- name: X-Header-Add-1
value: header-add-1
- name: X-Header-Add-2
value: header-add-2
- name: X-Header-Add-3
value: header-add-3