diff --git a/source/common/http/http1/codec_impl.cc b/source/common/http/http1/codec_impl.cc index 299f7c517a46..9c0e8d8e8034 100644 --- a/source/common/http/http1/codec_impl.cc +++ b/source/common/http/http1/codec_impl.cc @@ -650,8 +650,8 @@ int ConnectionImpl::onHeadersCompleteBase() { absl::string_view encoding = current_header_map_->TransferEncoding()->value().getStringView(); if (Runtime::runtimeFeatureEnabled( "envoy.reloadable_features.reject_unsupported_transfer_encodings") && - encoding != Headers::get().TransferEncodingValues.Identity && - encoding != Headers::get().TransferEncodingValues.Chunked) { + !absl::EqualsIgnoreCase(encoding, Headers::get().TransferEncodingValues.Identity) && + !absl::EqualsIgnoreCase(encoding, Headers::get().TransferEncodingValues.Chunked)) { error_code_ = Http::Code::NotImplemented; sendProtocolError(); throw CodecProtocolException("http/1.1 protocol error: unsupported transfer encoding"); diff --git a/test/common/http/http1/codec_impl_test.cc b/test/common/http/http1/codec_impl_test.cc index 85857378d0f3..d525060ece64 100644 --- a/test/common/http/http1/codec_impl_test.cc +++ b/test/common/http/http1/codec_impl_test.cc @@ -319,6 +319,30 @@ TEST_F(Http1ServerConnectionImplTest, ChunkedBody) { EXPECT_EQ(0U, buffer.length()); } +TEST_F(Http1ServerConnectionImplTest, ChunkedBodyCase) { + initialize(); + + InSequence sequence; + + NiceMock decoder; + EXPECT_CALL(callbacks_, newStream(_, _)).WillOnce(ReturnRef(decoder)); + + TestHeaderMapImpl expected_headers{ + {":path", "/"}, + {":method", "POST"}, + {"transfer-encoding", "Chunked"}, + }; + EXPECT_CALL(decoder, decodeHeaders_(HeaderMapEqual(&expected_headers), false)).Times(1); + Buffer::OwnedImpl expected_data("Hello World"); + EXPECT_CALL(decoder, decodeData(BufferEqual(&expected_data), false)).Times(1); + EXPECT_CALL(decoder, decodeData(_, true)).Times(1); + + Buffer::OwnedImpl buffer( + "POST / HTTP/1.1\r\ntransfer-encoding: Chunked\r\n\r\nb\r\nHello World\r\n0\r\n\r\n"); + codec_->dispatch(buffer); + EXPECT_EQ(0U, buffer.length()); +} + // Currently http_parser does not support chained transfer encodings. TEST_F(Http1ServerConnectionImplTest, IdentityAndChunkedBody) { initialize();