.. _config_http_conn_man_local_reply: Local reply modification ======================== The :ref:`HTTP connection manager ` supports modification of local reply which is response returned by Envoy itself. Features: * :ref:`Local reply content modification`. * :ref:`Local reply format modification`. .. _config_http_conn_man_local_reply_modification: Local reply content modification -------------------------------- The local response content returned by Envoy can be customized. A list of :ref:`mappers ` can be specified. Each mapper must have a :ref:`filter `. It may have following rewrite rules; a :ref:`status_code ` rule to rewrite response code, a :ref:`headers_to_add ` rule to add/override/append response HTTP headers, a :ref:`body ` rule to rewrite the local reply body and a :ref:`body_format_override ` to specify the response body format. Envoy checks each ``mapper`` according to the specified order until the first one is matched. If a ``mapper`` is matched, all its rewrite rules will apply. Example of a LocalReplyConfig .. code-block:: yaml 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" In above example, if the status_code is 400, it will be rewritten to 401, the response body will be rewritten to as "not allowed". .. _config_http_conn_man_local_reply_format: Local reply format modification ------------------------------- The response body content type can be customized. If not specified, the content type is plain/text. There are two ``body_format`` fields; one is the :ref:`body_format ` field in the :ref:`LocalReplyConfig ` message and the other :ref:`body_format_override ` field in the ``mapper``. The latter is only used when its mapper is matched. The former is used if there is no any matched mappers, or the matched mapper doesn't have the ``body_format`` specified. Local reply format can be specified as :ref:`SubstitutionFormatString `. It supports :ref:`text_format ` and :ref:`json_format `. Optionally, content-type can be modified further via :ref:`content_type ` field. If not specified, default content-type is ``text/plain`` for :ref:`text_format ` and ``application/json`` for :ref:`json_format `. Example of a LocalReplyConfig with ``body_format`` field. .. code-block:: yaml mappers: - filter: status_code_filter: comparison: op: EQ value: default_value: 400 runtime_key: key_b status_code: 401 body_format_override: text_format: "

%LOCAL_REPLY_BODY% %REQ(:path)%

" 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%" In above example, there is a ``body_format_override`` inside the first ``mapper`` with a filter matching ``status_code == 400``. It generates the response body in plain text format by concatenating %LOCAL_REPLY_BODY% with the ``:path`` request header. It is only used when the first mapper is matched. There is a ``body_format`` at the bottom of the config and at the same level as field ``mappers``. It is used when non of the mappers is matched or the matched mapper doesn't have its own ``body_format_override`` specified.