envoyproxy/envoy
Auf GitHub ansehenCustom data input types blocked by RouteActionValidationVisitor in route matchers
Open
#41.180 geöffnet am 23. Sept. 2025
area/matchinghelp wanted
Repository-Metriken
- Stars
- (27.997 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 8T) (378 gemergte PRs in 30 T)
Beschreibung
Background
I want to use matcher_tree and matcher_list in route matching to match based on query parameters, but custom data input types are blocked by RouteActionValidationVisitor.
The RouteActionValidationVisitor::performDataInputValidation in source/common/router/matcher_visitor.cc only allows:
HttpRequestHeaderMatchInputFilterStateInput
https://github.com/envoyproxy/envoy/blob/main/source/common/router/matcher_visitor.cc
absl::Status RouteActionValidationVisitor::performDataInputValidation(
const Matcher::DataInputFactory<Http::HttpMatchingData>&, absl::string_view type_url) {
static const std::string request_header_input_name = TypeUtil::descriptorFullNameToTypeUrl(
createReflectableMessage(
envoy::type::matcher::v3::HttpRequestHeaderMatchInput::default_instance())
->GetDescriptor()
->full_name());
static const std::string filter_state_input_name = TypeUtil::descriptorFullNameToTypeUrl(
createReflectableMessage(envoy::extensions::matching::common_inputs::network::v3::
FilterStateInput::default_instance())
->GetDescriptor()
->full_name());
if (type_url == request_header_input_name || type_url == filter_state_input_name) {
return absl::OkStatus();
}
return absl::InvalidArgumentError(
fmt::format("Route table can only match on request headers, saw {}", type_url));
}
Questions
- Why is this restriction in place? What's the design rationale?
- Is there a recommended way to do query parameter matching in route matchers?
- Are there plans to support more data input types in route matchers?