package httpfilter

import "google.golang.org/grpc/internal/xds/httpfilter"

Package httpfilter contains interface definitions for xDS-based HTTP filters and a registry for filter builders.

Index

Functions

func Register

func Register(b Builder)

Register registers the HTTP Filter Builder with the registry. b.TypeURLs() will be used as the types for this filter.

NOTE: this function must only be called during initialization time (i.e. in an init() function), and is not thread-safe. If multiple filters are registered with the same type URL, the one registered last will take effect.

func UnregisterForTesting

func UnregisterForTesting(typeURL string)

UnregisterForTesting unregisters the HTTP Filter Builder for testing purposes.

Types

type Builder

type Builder interface {
	// TypeURLs are the proto message types supported by this filter.  A filter
	// will be registered by each of its supported message types.
	TypeURLs() []string
	// ParseFilterConfig parses the provided configuration proto.Message from
	// the LDS configuration of this filter.  This may be an anypb.Any, a
	// udpa.type.v1.TypedStruct, or an xds.type.v3.TypedStruct for filters that
	// do not accept a custom type. The resulting FilterConfig will later be
	// passed to Build.
	ParseFilterConfig(proto.Message) (FilterConfig, error)
	// ParseFilterConfigOverride parses the provided override configuration
	// proto.Message from the RDS override configuration of this filter.  This
	// may be an anypb.Any, a udpa.type.v1.TypedStruct, or an
	// xds.type.v3.TypedStruct for filters that do not accept a custom type.
	// The resulting FilterConfig will later be passed to Build.
	ParseFilterConfigOverride(proto.Message) (FilterConfig, error)
	// IsTerminal returns whether this Filter is terminal or not (i.e. it must
	// be last filter in the filter chain).
	IsTerminal() bool
}

Builder defines the parsing functionality of an HTTP filter. A Builder may optionally implement either ClientFilterBuilder or ServerFilterBuilder or both, indicating it is capable of working on the client side or server side or both, respectively.

func Get

func Get(typeURL string) Builder

Get returns the HTTP Filter Builder registered with typeURL.

If no filter builder is register with typeURL, nil will be returned.

type ClientFilter

type ClientFilter interface {
	// BuildClientInterceptor uses the given FilterConfigs to produce an HTTP
	// filter interceptor for clients. config will always be non-nil, but
	// override may be nil if no override config exists for the filter.
	//
	// It is valid for this method to return a nil Interceptor and a nil error.
	// In this case, the RPC will not be intercepted by this filter.
	BuildClientInterceptor(config, override FilterConfig) (iresolver.ClientInterceptor, error)

	// Close is called when the filter is no longer needed.
	Close()
}

ClientFilter represents the actual filter implementation on the client side. Implementations are free to maintain internal state when required, and share it across interceptors. Filter instances are retained by the resolver as long as they are present in the LDS configuration.

type ClientFilterBuilder

type ClientFilterBuilder interface {
	// BuildClientFilter constructs a ClientFilter.
	BuildClientFilter() ClientFilter
}

ClientFilterBuilder is an optional interface that a Builder can implement to indicate its capability to build client-side filters.

type FilterConfig

type FilterConfig interface {
	// contains filtered or unexported methods
}

FilterConfig represents an opaque data structure holding configuration for a filter. Embed this interface to implement it.

type ServerFilter

type ServerFilter interface {
	// BuildServerInterceptor uses the given FilterConfigs to produce
	// an HTTP filter interceptor for servers. config will always be non-nil,
	// but override may be nil if no override config exists for the filter.
	//
	// It is valid for this method to return a nil Interceptor and a nil error.
	// In this case, the RPC will not be intercepted by this filter.
	BuildServerInterceptor(config, override FilterConfig) (iresolver.ServerInterceptor, error)

	// Close is called when the filter is no longer needed.
	Close()
}

ServerFilter represents the actual filter implementation on the server side. Implementations are free to maintain internal state when required, and share it across interceptors. Filter instances are retained by the server as long as they are present in any of the filter chains in the LDS configuration.

type ServerFilterBuilder

type ServerFilterBuilder interface {
	// BuildServerFilter constructs a ServerFilter.
	BuildServerFilter() ServerFilter
}

ServerFilterBuilder is an optional interface that a Builder can implement to indicate its capability to build server-side filters.

Source Files

httpfilter.go

Directories

PathSynopsis
internal/xds/httpfilter/faultPackage fault implements the Envoy Fault Injection HTTP filter.
internal/xds/httpfilter/rbacPackage rbac implements the Envoy RBAC HTTP filter.
internal/xds/httpfilter/routerPackage router implements the Envoy Router HTTP filter.
Version
v1.82.0-dev
Published
Apr 15, 2026
Platform
js/wasm
Imports
2 packages
Last checked
1 hour ago

Tools for package owners.