@@ -470,12 +470,12 @@ fn naive_proxy(cfg: ProxyConfig) -> (SocketAddr, impl Future<Output = ()>) {
470
470
let dst_addr = cfg. dst ;
471
471
let max_connections = cfg. connections ;
472
472
let counter = AtomicUsize :: new ( 0 ) ;
473
+ let http2_only = cfg. version == 2 ;
473
474
474
475
let listener = StdTcpListener :: bind ( SocketAddr :: from ( ( [ 127 , 0 , 0 , 1 ] , 0 ) ) ) . unwrap ( ) ;
475
476
476
477
let proxy_addr = listener. local_addr ( ) . unwrap ( ) ;
477
478
478
- let http2_only = cfg. version == 2 ;
479
479
let fut = async move {
480
480
let listener = TcpListener :: from_std ( listener) . unwrap ( ) ;
481
481
@@ -511,12 +511,27 @@ fn naive_proxy(cfg: ProxyConfig) -> (SocketAddr, impl Future<Output = ()>) {
511
511
}
512
512
} ) ;
513
513
514
- let res = sender. send_request ( req) . await ;
515
- res
514
+ let resp = sender. send_request ( req) . await ?;
515
+
516
+ let ( mut parts, body) = resp. into_parts ( ) ;
517
+
518
+ // Remove the Connection header for HTTP/1.1 proxy connections.
519
+ if !http2_only {
520
+ parts. headers . remove ( "Connection" ) ;
521
+ }
522
+
523
+ let mut builder = Response :: builder ( ) . status ( parts. status ) ;
524
+ * builder. headers_mut ( ) . unwrap ( ) = parts. headers ;
525
+
526
+ Result :: < Response < Body > , hyper:: Error > :: Ok ( builder. body ( body) . unwrap ( ) )
516
527
}
517
528
} ) ;
518
529
519
- Http :: new ( ) . serve_connection ( stream, service) . await . unwrap ( ) ;
530
+ Http :: new ( )
531
+ . http2_only ( http2_only)
532
+ . serve_connection ( stream, service)
533
+ . await
534
+ . unwrap ( ) ;
520
535
}
521
536
} ) ;
522
537
} ;
0 commit comments