From 5f4e60bf8df17ac45c01d55adf8e416646e96b37 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Tue, 9 Aug 2016 17:35:01 -0700 Subject: [PATCH] Always set "Connection: close" header for non keep-alive responses --- .../Internal/Http/Frame.cs | 2 +- .../ChunkedRequestTests.cs | 2 ++ .../ConnectionFilterTests.cs | 2 ++ .../DefaultHeaderTests.cs | 8 ++++++++ .../EngineTests.cs | 8 ++++++++ .../RequestTargetProcessingTests.cs | 6 +++--- 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs index 3f1c805dcf..f657864302 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs @@ -767,7 +767,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http } } - if (!_keepAlive && !hasConnection && _httpVersion != Http.HttpVersion.Http10) + if (!_keepAlive && !hasConnection) { responseHeaders.SetRawConnection("close", _bytesConnectionClose); } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedRequestTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedRequestTests.cs index c6de0ab0e3..476cddae2c 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedRequestTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedRequestTests.cs @@ -75,6 +75,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests ""); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "", "Hello World"); @@ -111,6 +112,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "Hello World"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "Content-Length: 7", "", diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionFilterTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionFilterTests.cs index 2d32fd6c6e..965a427b97 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionFilterTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionFilterTests.cs @@ -44,6 +44,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests await connection.SendEnd(sendString); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {serviceContext.DateHeaderValue}", "", "Hello World!"); @@ -68,6 +69,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "Hello World?"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {serviceContext.DateHeaderValue}", "", "Hello World!"); diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/DefaultHeaderTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/DefaultHeaderTests.cs index 890f663d12..a8818d80fe 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/DefaultHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/DefaultHeaderTests.cs @@ -24,6 +24,8 @@ namespace Microsoft.AspNetCore.Server.KestrelTests using (var connection = server.CreateConnection()) { await connection.SendEnd( + "GET / HTTP/1.1", + "", "GET / HTTP/1.0", "", ""); @@ -31,6 +33,12 @@ namespace Microsoft.AspNetCore.Server.KestrelTests await connection.ReceiveEnd( "HTTP/1.1 200 OK", $"Date: {testContext.DateHeaderValue}", + "Content-Length: 0", + "Server: Kestrel", + "", + "HTTP/1.1 200 OK", + "Connection: close", + $"Date: {testContext.DateHeaderValue}", "Server: Kestrel", "", ""); diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs index 81b6b96b8b..59f713fe41 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs @@ -135,6 +135,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "Hello World"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "", "Hello World"); @@ -259,6 +260,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "Hello World"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "", "Hello World"); @@ -289,6 +291,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "\r\n"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "Content-Length: 7", "", @@ -322,6 +325,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "\r\n"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "", "Goodbye"); @@ -354,6 +358,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "Hello World"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "Content-Length: 7", "", @@ -407,6 +412,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "\r\n"); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "\r\n"); } @@ -472,6 +478,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests ""); await connection.ReceiveEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "", ""); @@ -1050,6 +1057,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests ""); await connection.ReceiveForcedEnd( "HTTP/1.1 200 OK", + "Connection: close", $"Date: {testContext.DateHeaderValue}", "Content-Length: 11", "", diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/RequestTargetProcessingTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/RequestTargetProcessingTests.cs index 6d6a82ce3b..5c1c25d373 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/RequestTargetProcessingTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/RequestTargetProcessingTests.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests using (var connection = server.CreateConnection()) { await connection.SendEnd( - "GET /%41%CC%8A/A/../B/%41%CC%8A HTTP/1.0", + "GET /%41%CC%8A/A/../B/%41%CC%8A HTTP/1.1", "", ""); await connection.ReceiveEnd( @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests using (var connection = server.CreateConnection()) { await connection.SendEnd( - $"GET {requestTarget} HTTP/1.0", + $"GET {requestTarget} HTTP/1.1", "", ""); await connection.ReceiveEnd( @@ -115,7 +115,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests using (var connection = server.CreateConnection()) { await connection.SendEnd( - $"GET {requestTarget} HTTP/1.0", + $"GET {requestTarget} HTTP/1.1", "", ""); await connection.ReceiveEnd(