Repository: envoyproxy/envoy
File: api/envoy/config/route/v3/route.proto (Protocol Buffers)

Code before:
  //   this to be larger than the default 4KB, since the allocated memory for direct response body
  //   is not subject to data plane buffering controls.
  //
  google.protobuf.UInt32Value max_direct_response_body_size_bytes = 11;

  // A list of plugins and their configurations which may be used by a
  // :ref:`cluster specifier plugin name <envoy_v3_api_field_config.route.v3.RouteAction.cluster_specifier_plugin>`
  // within the route. All ``extension.name`` fields in this list must be unique.
  repeated ClusterSpecifierPlugin cluster_specifier_plugins = 12;

  // Specify a set of default request mirroring policies which apply to all routes under its virtual hosts.
  // Note that policies are not merged, the most specific non-empty one becomes the mirror policies.
  repeated RouteAction.RequestMirrorPolicy request_mirror_policies = 13;

  // By default, port in :authority header (if any) is used in host matching.
  // With this option enabled, Envoy will ignore the port number in the :authority header (if any) when picking VirtualHost.
  // NOTE: this option will not strip the port number (if any) contained in route config
  // :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.domains field.
  bool ignore_port_in_host_matching = 14;

  // Normally, virtual host matching is done using the :authority (or
  // Host: in HTTP < 2) HTTP header. Setting this will instead, use a
  // different HTTP header for this purpose. This is intended to be
  // combined with an "early_header_mutation" extension to allow
  // alternate or simplified host values to be used for host matching.
  string alternate_header_for_host_matching = 18;

  // Ignore path-parameters in path-matching.
  // Before RFC3986, URI were like(RFC1808): <scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
  // Envoy by default takes ":path" as "<path>;<params>".
  // For users who want to only match path on the "<path>" portion, this option should be true.
  bool ignore_path_parameters_in_path_matching = 15;

  // This field can be used to provide RouteConfiguration level per filter config. The key should match the
  // :ref:`filter config name
  // <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
  // See :ref:`Http filter route specific config <arch_overview_http_filters_per_filter_config>`
  // for details.
  // [#comment: An entry's value may be wrapped in a
  // :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
  // message to specify additional options.]
  map<string, google.protobuf.Any> typed_per_filter_config = 16;

  // The metadata field can be used to provide additional information
  // about the route configuration. It can be used for configuration, stats, and logging.
  // The metadata should go under the filter namespace that will need it.
  // For instance, if the metadata is intended for the Router filter,
  // the filter name should be specified as ``envoy.filters.http.router``.
  core.v3.Metadata metadata = 17;
}


Review comment (suggestion):
`vhost_header` is enough. Because most users could get it is header name that will be used for vhost searching from the simple `vhost_header`.

The comments also could be simplified and needn't to refer the early header mutation. The new feature self should be a general/common feature and needn't be bound to early header mutation 


Code after:
  //   this to be larger than the default 4KB, since the allocated memory for direct response body
  //   is not subject to data plane buffering controls.
  //
  google.protobuf.UInt32Value max_direct_response_body_size_bytes = 11;

  // A list of plugins and their configurations which may be used by a
  // :ref:`cluster specifier plugin name <envoy_v3_api_field_config.route.v3.RouteAction.cluster_specifier_plugin>`
  // within the route. All ``extension.name`` fields in this list must be unique.
  repeated ClusterSpecifierPlugin cluster_specifier_plugins = 12;

  // Specify a set of default request mirroring policies which apply to all routes under its virtual hosts.
  // Note that policies are not merged, the most specific non-empty one becomes the mirror policies.
  repeated RouteAction.RequestMirrorPolicy request_mirror_policies = 13;

  // By default, port in :authority header (if any) is used in host matching.
  // With this option enabled, Envoy will ignore the port number in the :authority header (if any) when picking VirtualHost.
  // NOTE: this option will not strip the port number (if any) contained in route config
  // :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.domains field.
  bool ignore_port_in_host_matching = 14;

  // Normally, virtual host matching is done using the :authority (or
  // Host: in HTTP < 2) HTTP header. Setting this will instead, use a
  // different HTTP header for this purpose.
  string vhost_header = 18;

  // Ignore path-parameters in path-matching.
  // Before RFC3986, URI were like(RFC1808): <scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
  // Envoy by default takes ":path" as "<path>;<params>".
  // For users who want to only match path on the "<path>" portion, this option should be true.
  bool ignore_path_parameters_in_path_matching = 15;

  // This field can be used to provide RouteConfiguration level per filter config. The key should match the
  // :ref:`filter config name
  // <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
  // See :ref:`Http filter route specific config <arch_overview_http_filters_per_filter_config>`
  // for details.
  // [#comment: An entry's value may be wrapped in a
  // :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
  // message to specify additional options.]
  map<string, google.protobuf.Any> typed_per_filter_config = 16;

  // The metadata field can be used to provide additional information
  // about the route configuration. It can be used for configuration, stats, and logging.
  // The metadata should go under the filter namespace that will need it.
  // For instance, if the metadata is intended for the Router filter,
  // the filter name should be specified as ``envoy.filters.http.router``.
  core.v3.Metadata metadata = 17;
}

message Vhds {
  option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Vhds";