diff --git a/source/extensions/filters/http/common/compressor/compressor.cc b/source/extensions/filters/http/common/compressor/compressor.cc index f417b890b5e27..5242ee31f4197 100644 --- a/source/extensions/filters/http/common/compressor/compressor.cc +++ b/source/extensions/filters/http/common/compressor/compressor.cc @@ -68,13 +68,8 @@ Http::FilterHeadersStatus CompressorFilter::decodeHeaders(Http::RequestHeaderMap accept_encoding_ = std::make_unique(accept_encoding->value().getStringView()); } - if (config_->enabled()) { - skip_compression_ = false; - if (config_->removeAcceptEncodingHeader()) { - headers.removeAcceptEncoding(); - } - } else { - config_->stats().not_compressed_.inc(); + if (config_->enabled() && config_->removeAcceptEncodingHeader()) { + headers.removeAcceptEncoding(); } return Http::FilterHeadersStatus::Continue; @@ -105,10 +100,11 @@ void CompressorFilter::setDecoderFilterCallbacks(Http::StreamDecoderFilterCallba Http::FilterHeadersStatus CompressorFilter::encodeHeaders(Http::ResponseHeaderMap& headers, bool end_stream) { - if (!end_stream && !skip_compression_ && isMinimumContentLength(headers) && + if (!end_stream && config_->enabled() && isMinimumContentLength(headers) && isAcceptEncodingAllowed(headers) && isContentTypeAllowed(headers) && !hasCacheControlNoTransform(headers) && isEtagAllowed(headers) && isTransferEncodingAllowed(headers) && !headers.ContentEncoding()) { + skip_compression_ = false; sanitizeEtagHeader(headers); insertVaryHeader(headers); headers.removeContentLength(); @@ -116,8 +112,7 @@ Http::FilterHeadersStatus CompressorFilter::encodeHeaders(Http::ResponseHeaderMa config_->stats().compressed_.inc(); // Finally instantiate the compressor. compressor_ = config_->makeCompressor(); - } else if (!skip_compression_) { - skip_compression_ = true; + } else { config_->stats().not_compressed_.inc(); } return Http::FilterHeadersStatus::Continue; diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_test.cc index 6f4379299330a..e6610b8149789 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_test.cc @@ -174,7 +174,9 @@ TEST_F(CompressorFilterTest, DecodeHeadersWithRuntimeDisabled) { } } )EOF"); - EXPECT_CALL(runtime_.snapshot_, getBoolean("foo_key", true)).WillOnce(Return(false)); + EXPECT_CALL(runtime_.snapshot_, getBoolean("foo_key", true)) + .Times(2) + .WillRepeatedly(Return(false)); doRequest({{":method", "get"}, {"accept-encoding", "deflate, test"}}, false); doResponseNoCompression({{":method", "get"}, {"content-length", "256"}}); } diff --git a/test/extensions/filters/http/gzip/gzip_filter_test.cc b/test/extensions/filters/http/gzip/gzip_filter_test.cc index 28035fd6510e0..6d451e436b9bb 100644 --- a/test/extensions/filters/http/gzip/gzip_filter_test.cc +++ b/test/extensions/filters/http/gzip/gzip_filter_test.cc @@ -176,7 +176,9 @@ TEST_F(GzipFilterTest, RuntimeDisabled) { } } )EOF"); - EXPECT_CALL(runtime_.snapshot_, getBoolean("foo_key", true)).WillOnce(Return(false)); + EXPECT_CALL(runtime_.snapshot_, getBoolean("foo_key", true)) + .Times(2) + .WillRepeatedly(Return(false)); doRequest({{":method", "get"}, {"accept-encoding", "deflate, gzip"}}, false); doResponseNoCompression({{":method", "get"}, {"content-length", "256"}}); }