@@ -36,9 +36,27 @@ export abstract class Response {
3636 /**
3737 * Set the HTTP response status code and headers.
3838 */
39- protected writeHead ( res : http . ServerResponse ) {
40- res . statusCode = this . statusCode ;
41- res . setHeaders ( this . headers ) ;
39+ protected writeHead ( res : http . ServerResponse , server : Server , req ?: Request ) {
40+ const headers = new Headers ( this . headers ) ;
41+ if ( req !== undefined )
42+ for ( const [ key , value ] of req . _responseHeaders )
43+ headers . set ( key , value ) ;
44+ if ( ! headers . has ( "date" ) )
45+ headers . set ( "date" , new Date ( ) . toUTCString ( ) ) ;
46+ if (
47+ req === undefined
48+ || req . headers . get ( "connection" ) === "close"
49+ || ! res . shouldKeepAlive
50+ )
51+ headers . set ( "connection" , "close" ) ;
52+ else {
53+ headers . set ( "connection" , "keep-alive" ) ;
54+ headers . set ( "keep-alive" , "timeout=" + server . _keepAliveTimeout ) ;
55+ }
56+ for ( const [ key , value ] of Array . from ( headers . entries ( ) )
57+ . sort ( ( a , b ) => a [ 0 ] . localeCompare ( b [ 0 ] ) ) )
58+ res . setHeader ( key , value ) ;
59+ res . writeHead ( this . statusCode ) ;
4260 }
4361
4462 /**
0 commit comments