@@ -85,18 +85,21 @@ async fn test_concurrent_requests() {
85
85
86
86
fn start_echo_server ( ) -> ServerHandle {
87
87
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) ;
100
103
Ok ( r. into_response ( resp) )
101
104
}
102
105
let server = actix_web:: HttpServer :: new ( move || {
0 commit comments