@@ -85,18 +85,21 @@ async fn test_concurrent_requests() {
8585
8686fn start_echo_server ( ) -> ServerHandle {
8787 async fn echo_server ( mut r : ServiceRequest ) -> actix_web:: Result < ServiceResponse > {
88- let method = r. method ( ) ;
89- let path = r. uri ( ) ;
90- let mut headers_vec = r
91- . headers ( )
92- . into_iter ( )
93- . map ( |( k, v) | format ! ( "{k}: {}" , String :: from_utf8_lossy( v. as_bytes( ) ) ) )
94- . collect :: < Vec < _ > > ( ) ;
95- headers_vec. sort ( ) ;
96- let headers = headers_vec. join ( "\n " ) ;
97- let mut resp_bytes = format ! ( "{method} {path}\n {headers}\n \n " ) . into_bytes ( ) ;
98- resp_bytes. extend ( r. extract :: < actix_web:: web:: Bytes > ( ) . await ?) ;
99- let resp = HttpResponse :: Ok ( ) . body ( resp_bytes) ;
88+ use std:: io:: Write ;
89+ let mut f = Vec :: new ( ) ;
90+ write ! ( f, "{} {}" , r. method( ) , r. uri( ) ) . unwrap ( ) ;
91+ let mut sorted_headers = r. headers ( ) . into_iter ( ) . collect :: < Vec < _ > > ( ) ;
92+ sorted_headers. sort_by_key ( |( k, _) | k. as_str ( ) ) ;
93+ for ( k, v) in sorted_headers {
94+ if k. as_str ( ) . eq_ignore_ascii_case ( "date" ) {
95+ continue ;
96+ }
97+ write ! ( f, "|{k}: " ) . unwrap ( ) ;
98+ f. extend_from_slice ( v. as_bytes ( ) ) ;
99+ }
100+ f. push ( b'|' ) ;
101+ f. extend_from_slice ( & r. extract :: < actix_web:: web:: Bytes > ( ) . await ?) ;
102+ let resp = HttpResponse :: Ok ( ) . body ( f) ;
100103 Ok ( r. into_response ( resp) )
101104 }
102105 let server = actix_web:: HttpServer :: new ( move || {
0 commit comments