@@ -48,13 +48,13 @@ internal ResponseHandler(IServer server, Socket socket, Stream outputStream, Net
4848
4949 #region Functionality
5050
51- internal async ValueTask < bool > Handle ( IRequest ? request , IResponse response , bool keepAlive , bool dataRemaining )
51+ internal async ValueTask < bool > Handle ( IRequest ? request , IResponse response , HttpProtocol version , bool keepAlive , bool dataRemaining )
5252 {
5353 try
5454 {
5555 await WriteStatus ( request , response ) ;
5656
57- await WriteHeader ( response , keepAlive ) ;
57+ await WriteHeader ( response , version , keepAlive ) ;
5858
5959 await Write ( NL ) ;
6060
@@ -99,7 +99,7 @@ private ValueTask WriteStatus(IRequest? request, IResponse response)
9999 return Write ( "HTTP/" , version , " " , NumberStringCache . Convert ( response . Status . RawStatus ) , " " , response . Status . Phrase , NL ) ;
100100 }
101101
102- private async ValueTask WriteHeader ( IResponse response , bool keepAlive )
102+ private async ValueTask WriteHeader ( IResponse response , HttpProtocol version , bool keepAlive )
103103 {
104104 if ( response . Headers . TryGetValue ( ServerHeader , out var server ) )
105105 {
@@ -112,7 +112,15 @@ private async ValueTask WriteHeader(IResponse response, bool keepAlive)
112112
113113 await WriteHeaderLine ( "Date" , DateHeader . GetValue ( ) ) ;
114114
115- await WriteHeaderLine ( "Connection" , keepAlive ? "Keep-Alive" : "Close" ) ;
115+ if ( version == HttpProtocol . Http10 )
116+ {
117+ await WriteHeaderLine ( "Connection" , keepAlive ? "Keep-Alive" : "Close" ) ;
118+ }
119+ else if ( ! keepAlive )
120+ {
121+ // HTTP/1.1 connections are persistent by default so we do not need to send a Keep-Alive header
122+ await WriteHeaderLine ( "Connection" , "Close" ) ;
123+ }
116124
117125 if ( response . ContentType is not null )
118126 {
0 commit comments