本地回复修改
该 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
时,它将被使用。