@@ -226,9 +226,22 @@ var transferEncodingExpression = /Transfer-Encoding/i;
226226var closeExpression = / c l o s e / i;
227227var chunkExpression = / c h u n k / i;
228228var contentLengthExpression = / C o n t e n t - L e n g t h / i;
229+ var dateExpression = / D a t e / i;
229230var expectExpression = / E x p e c t / i;
230231var continueExpression = / 1 0 0 - c o n t i n u e / i;
231232
233+ var dateCache ;
234+ function utcDate ( ) {
235+ if ( ! dateCache ) {
236+ var d = new Date ( ) ;
237+ dateCache = d . toUTCString ( ) ;
238+ setTimeout ( function ( ) {
239+ dateCache = undefined ;
240+ } , 1000 - d . getMilliseconds ( ) ) ;
241+ }
242+ return dateCache ;
243+ }
244+
232245
233246/* Abstract base class for ServerRequest and ClientResponse. */
234247function IncomingMessage ( socket ) {
@@ -383,6 +396,7 @@ function OutgoingMessage() {
383396 this . chunkedEncoding = false ;
384397 this . shouldKeepAlive = true ;
385398 this . useChunkedEncodingByDefault = true ;
399+ this . sendDate = false ;
386400
387401 this . _hasBody = true ;
388402 this . _trailer = '' ;
@@ -473,6 +487,7 @@ OutgoingMessage.prototype._storeHeader = function(firstLine, headers) {
473487 var sentConnectionHeader = false ;
474488 var sentContentLengthHeader = false ;
475489 var sentTransferEncodingHeader = false ;
490+ var sentDateHeader = false ;
476491 var sentExpect = false ;
477492
478493 // firstLine in the case of request is: 'GET /index.html HTTP/1.1\r\n'
@@ -498,7 +513,8 @@ OutgoingMessage.prototype._storeHeader = function(firstLine, headers) {
498513
499514 } else if ( contentLengthExpression . test ( field ) ) {
500515 sentContentLengthHeader = true ;
501-
516+ } else if ( dateExpression . test ( field ) ) {
517+ sentDateHeader = true ;
502518 } else if ( expectExpression . test ( field ) ) {
503519 sentExpect = true ;
504520 }
@@ -529,6 +545,11 @@ OutgoingMessage.prototype._storeHeader = function(firstLine, headers) {
529545 }
530546 }
531547
548+ // Date header
549+ if ( this . sendDate == true && sentDateHeader == false ) {
550+ messageHeader += "Date: " + utcDate ( ) + CRLF ;
551+ }
552+
532553 // keep-alive logic
533554 if ( sentConnectionHeader === false ) {
534555 if ( this . shouldKeepAlive &&
@@ -816,6 +837,8 @@ function ServerResponse(req) {
816837
817838 if ( req . method === 'HEAD' ) this . _hasBody = false ;
818839
840+ this . sendDate = true ;
841+
819842 if ( req . httpVersionMajor < 1 || req . httpVersionMinor < 1 ) {
820843 this . useChunkedEncodingByDefault = false ;
821844 this . shouldKeepAlive = false ;
0 commit comments