From 8fb75deb4697d83769dee46248f57ac5173995d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marie=20P=C3=ADchov=C3=A1?= <11718369+ManickaP@users.noreply.github.com> Date: Tue, 21 Jun 2022 21:58:49 +0200 Subject: [PATCH] Fixed :scheme header for H/2 with PlaintextStreamFilter (#71057) --- .../tests/System/Net/Http/Http2LoopbackConnection.cs | 2 +- .../System/Net/Http/SocketsHttpHandler/Http2Connection.cs | 2 +- .../tests/FunctionalTests/SocketsHttpHandlerTest.cs | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/libraries/Common/tests/System/Net/Http/Http2LoopbackConnection.cs b/src/libraries/Common/tests/System/Net/Http/Http2LoopbackConnection.cs index fbba51f0209..75415dcc977 100644 --- a/src/libraries/Common/tests/System/Net/Http/Http2LoopbackConnection.cs +++ b/src/libraries/Common/tests/System/Net/Http/Http2LoopbackConnection.cs @@ -103,7 +103,7 @@ private async Task ReadPrefixAsync() await _connectionStream.WriteAsync("HTTP/2.0 400 Bad Request\r\n\r\n"u8.ToArray()); _connectionSocket.Shutdown(SocketShutdown.Send); // If WinHTTP doesn't support streaming a request without a length then it will fallback - // to HTTP/1.1. Throwing an exception to detect this case in WinHttpHandler tests. + // to HTTP/1.1. Throwing an exception to detect this case in WinHttpHandler tests. throw new Exception("HTTP/1.1 request sent to HTTP/2 connection."); } } diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/Http2Connection.cs b/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/Http2Connection.cs index 9dc706680c9..40c27f5ebb4 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/Http2Connection.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/Http2Connection.cs @@ -1424,7 +1424,7 @@ private void WriteHeaders(HttpRequestMessage request, ref ArrayBuffer headerBuff WriteIndexedHeader(H2StaticTable.MethodGet, normalizedMethod.Method, ref headerBuffer); } - WriteIndexedHeader(_stream is SslStream ? H2StaticTable.SchemeHttps : H2StaticTable.SchemeHttp, ref headerBuffer); + WriteIndexedHeader(_pool.IsSecure ? H2StaticTable.SchemeHttps : H2StaticTable.SchemeHttp, ref headerBuffer); if (request.HasHeaders && request.Headers.Host != null) { diff --git a/src/libraries/System.Net.Http/tests/FunctionalTests/SocketsHttpHandlerTest.cs b/src/libraries/System.Net.Http/tests/FunctionalTests/SocketsHttpHandlerTest.cs index 6248cf3c9ca..6797e8e07a8 100644 --- a/src/libraries/System.Net.Http/tests/FunctionalTests/SocketsHttpHandlerTest.cs +++ b/src/libraries/System.Net.Http/tests/FunctionalTests/SocketsHttpHandlerTest.cs @@ -3193,7 +3193,12 @@ public async Task PlaintextStreamFilter_SimpleDelegatingStream_Success(bool useS }, async server => { - await server.AcceptConnectionSendResponseAndCloseAsync(content: "foo"); + HttpRequestData request = await server.AcceptConnectionSendResponseAndCloseAsync(content: "foo"); + if (request.Version == HttpVersion20.Value) + { + HttpHeaderData schemeHeader = Assert.Single(request.Headers, headerData => headerData.Name == ":scheme"); + Assert.Equal(useSsl ? "https" : "http", schemeHeader.Value); + } }, options: options); } -- GitLab