@@ -55,6 +55,7 @@ pub(crate) struct Config {
5555 pub ( crate ) keep_alive_timeout : Duration ,
5656 pub ( crate ) max_send_buffer_size : usize ,
5757 pub ( crate ) max_header_list_size : u32 ,
58+ pub ( crate ) date_header : bool ,
5859}
5960
6061impl Default for Config {
@@ -72,6 +73,7 @@ impl Default for Config {
7273 keep_alive_timeout : Duration :: from_secs ( 20 ) ,
7374 max_send_buffer_size : DEFAULT_MAX_SEND_BUF_SIZE ,
7475 max_header_list_size : DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE ,
76+ date_header : true ,
7577 }
7678 }
7779}
@@ -86,6 +88,7 @@ pin_project! {
8688 timer: Time ,
8789 service: S ,
8890 state: State <T , B >,
91+ date_header: bool ,
8992 }
9093}
9194
@@ -108,6 +111,7 @@ where
108111 ping : Option < ( ping:: Recorder , ping:: Ponger ) > ,
109112 conn : Connection < Compat < T > , SendBuf < B :: Data > > ,
110113 closing : Option < crate :: Error > ,
114+ date_header : bool ,
111115}
112116
113117impl < T , S , B , E > Server < T , S , B , E >
@@ -167,6 +171,7 @@ where
167171 hs : handshake,
168172 } ,
169173 service,
174+ date_header : config. date_header ,
170175 }
171176 }
172177
@@ -219,6 +224,7 @@ where
219224 ping,
220225 conn,
221226 closing : None ,
227+ date_header : me. date_header ,
222228 } )
223229 }
224230 State :: Serving ( ref mut srv) => {
@@ -302,7 +308,13 @@ where
302308 req. extensions_mut ( ) . insert ( Protocol :: from_inner ( protocol) ) ;
303309 }
304310
305- let fut = H2Stream :: new ( service. call ( req) , connect_parts, respond) ;
311+ let fut = H2Stream :: new (
312+ service. call ( req) ,
313+ connect_parts,
314+ respond,
315+ self . date_header ,
316+ ) ;
317+
306318 exec. execute_h2stream ( fut) ;
307319 }
308320 Some ( Err ( e) ) => {
@@ -357,6 +369,7 @@ pin_project! {
357369 reply: SendResponse <SendBuf <B :: Data >>,
358370 #[ pin]
359371 state: H2StreamState <F , B >,
372+ date_header: bool ,
360373 }
361374}
362375
@@ -392,10 +405,12 @@ where
392405 fut : F ,
393406 connect_parts : Option < ConnectParts > ,
394407 respond : SendResponse < SendBuf < B :: Data > > ,
408+ date_header : bool ,
395409 ) -> H2Stream < F , B > {
396410 H2Stream {
397411 reply : respond,
398412 state : H2StreamState :: Service { fut, connect_parts } ,
413+ date_header,
399414 }
400415 }
401416}
@@ -454,10 +469,12 @@ where
454469 let mut res = :: http:: Response :: from_parts ( head, ( ) ) ;
455470 super :: strip_connection_headers ( res. headers_mut ( ) , false ) ;
456471
457- // set Date header if it isn't already set...
458- res. headers_mut ( )
459- . entry ( :: http:: header:: DATE )
460- . or_insert_with ( date:: update_and_header_value) ;
472+ // set Date header if it isn't already set if instructed
473+ if * me. date_header {
474+ res. headers_mut ( )
475+ . entry ( :: http:: header:: DATE )
476+ . or_insert_with ( date:: update_and_header_value) ;
477+ }
461478
462479 if let Some ( connect_parts) = connect_parts. take ( ) {
463480 if res. status ( ) . is_success ( ) {
0 commit comments