-
Notifications
You must be signed in to change notification settings - Fork 10.5k
Description
Describe the bug
Somewhat similar to #13273 but this is client -> server.
According to https://tools.ietf.org/html/rfc2616#section-4.3:
The presence of a message-body in a request is signaled by the inclusion of a Content-Length or Transfer-Encoding header field in the request's message-headers.
When streaming content to an AspNetCore application via TestSever and it's client without a Content-Length
header, the Transfer-Encoding header is missing.
To Reproduce
Given the following contrived code where a client pushes some data to the server and where the Content-Length
cannot be determined up-front:
var client = testServer.CreateClient();
var random = new Random();
var request = new HttpRequestMessage(HttpMethod.Post, "/")
{
Content = new PushStreamContent(async (stream, httpContext, transPortContext) =>
{
var buffer = new byte[100];
for (int i = 0; i < random.Next(1, 100); i++)
{
await stream.WriteAsync(buffer);
}
await stream.FlushAsync();
stream.Dispose();
})
};
var response = await client.SendAsync(request);
- When run against Kestrel,
Content-Length
is null ✔️ andTransfer-Encoding
header is present. ✔️ - When run against TestServer,
Content-Length
is null ✔️ butTransfer-Envoding
header is not present. ❌
Notwithstanding the potential complexity of simulating Transfer-Encoding chunked in TestServer and it's custom HttpMessageHandler, it would appear the behaviour is not inline with the RFC?
Side note: I think I'd prefer to see TestServer deprecated in favour of an in-memory kestrel.
Further technical details
- ASP.NET Core version : 2.1.x and 3.1.x
- Include the output of
dotnet --info
PS C:\dev> dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 5.0.100-preview.3.20216.6
Commit: 9f62a32109
Runtime Environment:
OS Name: Windows
OS Version: 10.0.18363
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\5.0.100-preview.3.20216.6\
Host (useful for support):
Version: 5.0.0-preview.3.20214.6
Commit: b037784658
.NET SDKs installed:
2.1.801 [C:\Program Files\dotnet\sdk]
3.1.102 [C:\Program Files\dotnet\sdk]
3.1.201 [C:\Program Files\dotnet\sdk]
3.1.300-preview-015135 [C:\Program Files\dotnet\sdk]
5.0.100-preview.3.20216.6 [C:\Program Files\dotnet\sdk]
.NET runtimes installed:
Microsoft.AspNetCore.All 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.0-preview.3.20215.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.0-preview.3.20214.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.0-preview.3.20214.2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]