本地回复修改

HTTP 连接管理器 支持修改本地回复,即 Envoy 本身返回的响应。

特性

本地回复内容修改

可以自定义 Envoy 返回的本地响应内容。可以指定一个 映射器 列表。每个映射器都必须有一个 过滤器。它可能具有以下重写规则;一个 状态码 规则来重写响应代码,一个 要添加的标题 规则来添加/覆盖/追加响应 HTTP 标题,一个 主体 规则来重写本地回复主体,以及一个 主体格式覆盖 来指定响应主体格式。Envoy 按指定顺序检查每个 映射器,直到第一个匹配为止。如果一个 映射器 匹配,则其所有重写规则都将应用。

LocalReplyConfig 示例

mappers:
- filter:
    status_code_filter:
      comparison:
        op: EQ
        value:
          default_value: 400
          runtime_key: key_b
  headers_to_add:
    - header:
        key: "foo"
        value: "bar"
      append_action: OVERWRITE_IF_EXISTS_OR_ADD
  status_code: 401
  body:
    inline_string: "not allowed"

在上面的示例中,如果状态码为 400,它将被重写为 401,响应主体将被重写为“不允许”。

本地回复格式修改

可以自定义响应主体内容类型。如果未指定,内容类型为 plain/text。有两个 主体格式 字段;一个是 主体格式 字段,它位于 LocalReplyConfig 消息中,另一个是 主体格式覆盖 字段,它位于 映射器 中。后者仅在映射器匹配时使用。如果没有任何匹配的映射器,或者匹配的映射器没有指定 主体格式,则使用前者。

本地回复格式可以指定为 SubstitutionFormatString。它支持 文本格式JSON 格式

可以选择通过 内容类型 字段进一步修改内容类型。如果未指定,默认内容类型对于 文本格式text/plain,对于 JSON 格式application/json

具有 body_format 字段的 LocalReplyConfig 示例。

mappers:
- filter:
    status_code_filter:
      comparison:
        op: EQ
        value:
          default_value: 400
          runtime_key: key_b
  status_code: 401
  body_format_override:
    text_format: "<h1>%LOCAL_REPLY_BODY% %REQ(:path)%</h1>"
    content_type: "text/html; charset=UTF-8"
- filter:
    status_code_filter:
      comparison:
        op: EQ
        value:
          default_value: 500
          runtime_key: key_b
  status_code: 501
body_format:
  text_format: "%LOCAL_REPLY_BODY% %RESPONSE_CODE%"

在上面的示例中,第一个 映射器 中有一个 body_format_override,其过滤器匹配 status_code == 400。它通过将 %LOCAL_REPLY_BODY% 与 :path 请求头连接起来,以纯文本格式生成响应主体。它仅在第一个映射器匹配时使用。在配置的底部,与字段 mappers 在同一级别有一个 body_format。当没有一个映射器匹配,或者匹配的映射器没有指定自己的 body_format_override 时,它将被使用。