Skip to content

Commit eede86f

Browse files
format correctly chuncked response with Content-Length header (#69016) (#70744)
Co-authored-by: Badre BSAILA <[email protected]>
1 parent 4d6a40a commit eede86f

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnection.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,10 @@ public async Task<HttpResponseMessage> SendAsyncCore(HttpRequestMessage request,
739739
_pool.InvalidateHttp11Connection(this);
740740
_detachedFromPool = true;
741741
}
742+
else if (response.Headers.TransferEncodingChunked == true)
743+
{
744+
responseStream = new ChunkedEncodingReadStream(this, response);
745+
}
742746
else if (response.Content.Headers.ContentLength != null)
743747
{
744748
long contentLength = response.Content.Headers.ContentLength.GetValueOrDefault();
@@ -752,10 +756,6 @@ public async Task<HttpResponseMessage> SendAsyncCore(HttpRequestMessage request,
752756
responseStream = new ContentLengthReadStream(this, (ulong)contentLength);
753757
}
754758
}
755-
else if (response.Headers.TransferEncodingChunked == true)
756-
{
757-
responseStream = new ChunkedEncodingReadStream(this, response);
758-
}
759759
else
760760
{
761761
responseStream = new ConnectionCloseReadStream(this);

src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.Headers.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,5 +561,40 @@ await LoopbackServerFactory.CreateClientAndServerAsync(
561561
await server.HandleRequestAsync(headers: headerData);
562562
});
563563
}
564+
565+
[Fact]
566+
public async Task SendAsync_ContentLengthAndTransferEncodingHeaders_IgnoreContentLength()
567+
{
568+
await LoopbackServer.CreateServerAsync(async (server, uri) =>
569+
{
570+
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, uri)
571+
{
572+
Version = UseVersion
573+
};
574+
using HttpClient client = new HttpClient();
575+
Task<HttpResponseMessage> getResponse = client.SendAsync(requestMessage);
576+
await server.AcceptConnectionAsync(async connection =>
577+
{
578+
await connection.SendResponseAsync(HttpStatusCode.OK,
579+
new List<HttpHeaderData>
580+
{
581+
new HttpHeaderData("Content-Length", "33"),
582+
new HttpHeaderData("Transfer-Encoding", "chunked")
583+
}, "5\r\nhello\r\n5\r\nworld\r\n3\r\nyay\r\n0\r\n\r\n");
584+
585+
using (HttpResponseMessage response = await getResponse)
586+
{
587+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
588+
589+
Assert.True(response.Headers.Contains("Transfer-Encoding"));
590+
Assert.Equal("chunked", Assert.Single(response.Headers.GetValues("Transfer-Encoding")));
591+
Assert.Equal(33, response.Content.Headers.ContentLength);
592+
593+
string content = await response.Content.ReadAsStringAsync();
594+
Assert.Equal("helloworldyay", content);
595+
}
596+
});
597+
});
598+
}
564599
}
565600
}

0 commit comments

Comments
 (0)