Router (proto)

This extension has the qualified name envoy.filters.http.router


This extension is intended to be robust against untrusted downstream traffic. It assumes that the upstream is trusted.


This extension extends and can be used with the following extension category:

This extension must be configured with one of the following type URLs:

Router configuration overview.


[extensions.filters.http.router.v3.Router proto]

  "dynamic_stats": {...},
  "start_child_span": ...,
  "upstream_log": [],
  "upstream_log_options": {...},
  "suppress_envoy_headers": ...,
  "strict_check_headers": [],
  "respect_expected_rq_timeout": ...,
  "suppress_grpc_request_failure_code_stats": ...,
  "upstream_http_filters": []

(BoolValue) Whether the router generates dynamic cluster statistics. Defaults to true. Can be disabled in high performance scenarios.


(bool) Whether to start a child span for egress routed calls. This can be useful in scenarios where other filters (auth, ratelimit, etc.) make outbound calls and have child spans rooted at the same ingress parent. Defaults to false.


This field is deprecated by the spawn_upstream_span. Please use that spawn_upstream_span field to control the span creation.


(repeated config.accesslog.v3.AccessLog) Configuration for HTTP upstream logs emitted by the router. Upstream logs are configured in the same way as access logs, but each log entry represents an upstream request. Presuming retries are configured, multiple upstream requests may be made for each downstream (inbound) request.


(extensions.filters.http.router.v3.Router.UpstreamAccessLogOptions) Additional upstream access log options.


(bool) Do not add any additional x-envoy- headers to requests or responses. This only affects the router filter generated x-envoy- headers, other Envoy filters and the HTTP connection manager may continue to set x-envoy- headers.


(repeated string) Specifies a list of HTTP headers to strictly validate. Envoy will reject a request and respond with HTTP status 400 if the request contains an invalid value for any of the headers listed in this field. Strict header checking is only supported for the following headers:

Value must be a ‘,’-delimited list (i.e. no spaces) of supported retry policy values:

Value must be an integer:


(bool) If not set, ingress Envoy will ignore x-envoy-expected-rq-timeout-ms header, populated by egress Envoy, when deriving timeout for upstream cluster.


(bool) If set, Envoy will avoid incrementing HTTP failure code stats on gRPC requests. This includes the individual status code value (e.g. upstream_rq_504) and group stats (e.g. upstream_rq_5xx). This field is useful if interested in relying only on the gRPC stats filter to define success and failure metrics for gRPC requests as not all failed gRPC requests charge HTTP status code metrics. See gRPC stats filter documentation for more details.

(repeated .. note::

Upstream HTTP filters are currently in alpha.

Optional HTTP filters for the upstream HTTP filter chain.

These filters will be applied for all requests that pass through the router. They will also be applied to shadowed requests. Upstream HTTP filters cannot change route or cluster. Upstream HTTP filters specified on the cluster will override these filters.

If using upstream HTTP filters, please be aware that local errors sent by upstream HTTP filters will not trigger retries, and local errors sent by upstream HTTP filters will count as a final response if hedging is configured.


[extensions.filters.http.router.v3.Router.UpstreamAccessLogOptions proto]

  "flush_upstream_log_on_upstream_stream": ...,
  "upstream_log_flush_interval": {...}

(bool) If set to true, an upstream access log will be recorded when an upstream stream is associated to an http request. Note: Each HTTP request received for an already established connection will result in an upstream access log record. This includes, for example, consecutive HTTP requests over the same connection or a request that is retried. In case a retry is applied, an upstream access log will be recorded for each retry.


(Duration) The interval to flush the upstream access logs. By default, the router will flush an upstream access log on stream close, when the HTTP request is complete. If this field is set, the router will flush access logs periodically at the specified interval. This is especially useful in the case of long-lived requests, such as CONNECT and Websockets. The interval must be at least 1 millisecond.