@@ -478,3 +478,66 @@ async fn test_scheme_only_check_after_policy_return_follow() {
478478 assert ! ( res. is_err( ) ) ;
479479 assert ! ( res. unwrap_err( ) . is_builder( ) ) ;
480480}
481+
482+ #[ tokio:: test]
483+ async fn test_redirect_301_302_303_empty_payload_headers ( ) {
484+ let client = reqwest:: Client :: new ( ) ;
485+ let codes = [ 301u16 , 302 , 303 ] ;
486+ for & code in & codes {
487+ let redirect = server:: http ( move |mut req| async move {
488+ if req. method ( ) == "POST" {
489+ let data = req
490+ . body_mut ( )
491+ . frame ( )
492+ . await
493+ . unwrap ( )
494+ . unwrap ( )
495+ . into_data ( )
496+ . unwrap ( ) ;
497+
498+ assert_eq ! ( & * data, b"Hello" ) ;
499+ if req. headers ( ) . get ( reqwest:: header:: CONTENT_LENGTH ) . is_some ( ) {
500+ assert_eq ! ( req. headers( ) [ reqwest:: header:: CONTENT_LENGTH ] , "5" ) ;
501+ }
502+ assert_eq ! ( req. uri( ) , & * format!( "/{code}" ) ) ;
503+
504+ http:: Response :: builder ( )
505+ . header ( "location" , "/dst" )
506+ . header ( "server" , "test-dst" )
507+ . status ( code)
508+ . body ( Body :: default ( ) )
509+ . unwrap ( )
510+ } else {
511+ assert_eq ! ( req. method( ) , "GET" ) ;
512+ assert ! ( req. headers( ) . get( reqwest:: header:: CONTENT_TYPE ) . is_none( ) ) ;
513+ assert ! ( req. headers( ) . get( reqwest:: header:: CONTENT_LENGTH ) . is_none( ) ) ;
514+ assert ! ( req
515+ . headers( )
516+ . get( reqwest:: header:: CONTENT_ENCODING )
517+ . is_none( ) ) ;
518+ http:: Response :: builder ( )
519+ . header ( "server" , "test-dst" )
520+ . body ( Body :: default ( ) )
521+ . unwrap ( )
522+ }
523+ } ) ;
524+
525+ let url = format ! ( "http://{}/{}" , redirect. addr( ) , code) ;
526+ let dst = format ! ( "http://{}/{}" , redirect. addr( ) , "dst" ) ;
527+ let res = client
528+ . post ( & url)
529+ . body ( "Hello" )
530+ . header ( reqwest:: header:: CONTENT_TYPE , "text/plain" )
531+ . header ( reqwest:: header:: CONTENT_LENGTH , "5" )
532+ . header ( reqwest:: header:: CONTENT_ENCODING , "identity" )
533+ . send ( )
534+ . await
535+ . unwrap ( ) ;
536+ assert_eq ! ( res. url( ) . as_str( ) , dst) ;
537+ assert_eq ! ( res. status( ) , 200 ) ;
538+ assert_eq ! (
539+ res. headers( ) . get( reqwest:: header:: SERVER ) . unwrap( ) ,
540+ & "test-dst"
541+ ) ;
542+ }
543+ }
0 commit comments