跳到内容

HTTP 头部修改器

HTTPRoute 资源 可以修改来自客户端的 HTTP 请求和 HTTP 响应的头部。有两种类型的 过滤器 可用于满足这些要求:RequestHeaderModifierResponseHeaderModifier

本指南演示了如何使用这些功能。

请注意,这些功能是兼容的。可以使用单个 HTTPRoute 资源 修改传入请求的 HTTP 头部及其响应的头部。

HTTP 请求头部修改器

HTTP 头部修改是向传入请求添加、删除或修改 HTTP 头部的过程。

要配置 HTTP 头部修改,请定义一个包含一个或多个 HTTP 过滤器的网关对象。每个过滤器指定对传入请求进行的特定修改,例如添加自定义头部或修改现有头部。

要向 HTTP 请求添加头部,请使用类型为 RequestHeaderModifier 的过滤器,并使用 add 动作以及头部的名称和值

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

要编辑现有头部,请使用 set 动作并指定要修改的头部值以及要设置的新头部值。

    filters:
    - type: RequestHeaderModifier
      requestHeaderModifier:
        set: 
          - name: my-header-name
            value: my-new-header-value

还可以使用 remove 关键字和头部名称列表来删除头部。

    filters:
    - type: RequestHeaderModifier
      requestHeaderModifier:
        remove: ["x-request-id"]

使用上面的示例将从 HTTP 请求中删除 x-request-id 头部。

HTTP 响应头部修改器

就像编辑请求头部很有用一样,编辑响应头部也是如此。例如,它允许团队仅为某个特定后端添加/删除 cookie,这有助于识别之前重定向到该后端的特定用户。

另一个可能的用例可能是当你的前端需要知道它是否正在与后端服务器的稳定版本或 beta 版本进行通信时,以便渲染不同的 UI 或相应地调整其响应解析。

修改 HTTP 头部响应使用与修改原始请求时非常相似的语法,尽管使用了不同的过滤器 (ResponseHeaderModifier)。

可以添加、编辑和删除头部。可以添加多个头部,如下面的示例所示

    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