Skip to content

Commit

Permalink
Add compression for HTTP/3 server support (#3192)
Browse files Browse the repository at this point in the history
Related to #1531
  • Loading branch information
violetagg committed Apr 23, 2024
1 parent 43a369e commit ccd71b5
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
Expand Up @@ -59,6 +59,7 @@ final class Http3Codec extends ChannelInitializer<QuicStreamChannel> {
final ConnectionObserver listener;
final BiFunction<? super Mono<Void>, ? super Connection, ? extends Mono<Void>>
mapHandle;
final int minCompressionSize;
final ChannelOperations.OnSetup opsFactory;
final Duration readTimeout;
final Duration requestTimeout;
Expand All @@ -75,6 +76,7 @@ final class Http3Codec extends ChannelInitializer<QuicStreamChannel> {
HttpMessageLogFactory httpMessageLogFactory,
ConnectionObserver listener,
@Nullable BiFunction<? super Mono<Void>, ? super Connection, ? extends Mono<Void>> mapHandle,
int minCompressionSize,
ChannelOperations.OnSetup opsFactory,
@Nullable Duration readTimeout,
@Nullable Duration requestTimeout,
Expand All @@ -89,6 +91,7 @@ final class Http3Codec extends ChannelInitializer<QuicStreamChannel> {
this.httpMessageLogFactory = httpMessageLogFactory;
this.listener = listener;
this.mapHandle = mapHandle;
this.minCompressionSize = minCompressionSize;
this.opsFactory = opsFactory;
this.readTimeout = readTimeout;
this.requestTimeout = requestTimeout;
Expand All @@ -108,6 +111,12 @@ protected void initChannel(QuicStreamChannel channel) {
new Http3StreamBridgeServerHandler(compressPredicate, cookieDecoder, cookieEncoder, formDecoderProvider,
forwardedHeaderHandler, httpMessageLogFactory, listener, mapHandle, readTimeout, requestTimeout));

boolean alwaysCompress = compressPredicate == null && minCompressionSize == 0;

if (alwaysCompress) {
p.addLast(NettyPipeline.CompressionHandler, new SimpleCompressionHandler());
}

ChannelOperations.addReactiveBridge(channel, opsFactory, listener);

channel.pipeline().remove(this);
Expand All @@ -128,12 +137,13 @@ static ChannelHandler newHttp3ServerConnectionHandler(
HttpMessageLogFactory httpMessageLogFactory,
ConnectionObserver listener,
@Nullable BiFunction<? super Mono<Void>, ? super Connection, ? extends Mono<Void>> mapHandle,
int minCompressionSize,
ChannelOperations.OnSetup opsFactory,
@Nullable Duration readTimeout,
@Nullable Duration requestTimeout,
boolean validate) {
return new Http3ServerConnectionHandler(
new Http3Codec(accessLogEnabled, accessLog, compressPredicate, decoder, encoder, formDecoderProvider, forwardedHeaderHandler,
httpMessageLogFactory, listener, mapHandle, opsFactory, readTimeout, requestTimeout, validate));
httpMessageLogFactory, listener, mapHandle, minCompressionSize, opsFactory, readTimeout, requestTimeout, validate));
}
}
Expand Up @@ -600,6 +600,7 @@ static void configureHttp3Pipeline(
HttpMessageLogFactory httpMessageLogFactory,
ConnectionObserver listener,
@Nullable BiFunction<? super Mono<Void>, ? super Connection, ? extends Mono<Void>> mapHandle,
int minCompressionSize,
ChannelOperations.OnSetup opsFactory,
@Nullable Duration readTimeout,
@Nullable Duration requestTimeout,
Expand All @@ -608,7 +609,7 @@ static void configureHttp3Pipeline(

p.addLast(NettyPipeline.HttpCodec, newHttp3ServerConnectionHandler(accessLogEnabled, accessLog, compressPredicate,
cookieDecoder, cookieEncoder, formDecoderProvider, forwardedHeaderHandler, httpMessageLogFactory,
listener, mapHandle, opsFactory, readTimeout, requestTimeout, validate));
listener, mapHandle, minCompressionSize, opsFactory, readTimeout, requestTimeout, validate));
}

static void configureH2Pipeline(ChannelPipeline p,
Expand Down Expand Up @@ -1407,6 +1408,7 @@ else if ((protocols & h3) == h3) {
httpMessageLogFactory,
observer,
mapHandle,
minCompressionSize,
opsFactory,
readTimeout,
requestTimeout,
Expand Down

0 comments on commit ccd71b5

Please sign in to comment.