Add extensible content encoding filter - #14199
Open
arnabnandy7 wants to merge 1 commit into
Open
arnabnandy7 wants to merge 1 commit into
arnabnandy7 wants to merge 1 commit into
Conversation
Signed-off-by: Arnab Nandy <arnab_nandy7@yahoo.com>
arnabnandy7
force-pushed
the
feature/extensible-content-encoding-filter
branch
from
August 15, 2026 14:13
280ff42 to
3235a6c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Checklist
Helpful things
Fixes
Fixes #14073
Purpose
This PR introduces an extensible
ContentEncodingFilterfor applying custom response content encodings through a Pekko StreamsFlow.The filter provides the response-processing behavior previously implemented directly by
GzipFilter, including:Accept-EncodingnegotiationContent-EncodingandVaryheader handlingGzipFilternow delegates this shared behavior toContentEncodingFilterwhile preserving its existing constructors, configuration, and public behavior.Applications can use the new filter with encoding implementations such as Brotli or Zstandard by supplying an encoding name and a factory for the appropriate encoding flow.
Background Context
The response handling in
GzipFilteris largely independent of gzip itself. Only the encoding name and the stream transformation are gzip-specific.Adding Brotli, Zstandard, or another encoding by copying
GzipFilterwould duplicate negotiation, header management, buffering, and entity-handling logic. Extracting that logic intoContentEncodingFilterprovides a reusable extension point while keeping the existing gzip implementation backward compatible.A flow factory is used instead of a shared flow instance so that each response stream receives a fresh encoder. The existing gzip test coverage continues to exercise the extracted behavior through
GzipFilter, with additional focused tests covering custom encodings and transcoding predicates.The gzip documentation now includes an example showing how to define a Brotli filter using an externally supplied encoding flow.
References