@@ -38,7 +38,6 @@ pub struct Parts {
38
38
pub header : HeaderMap ,
39
39
pub version : Version ,
40
40
pub url : Url ,
41
- pub path : String ,
42
41
pub extensions : Extensions ,
43
42
}
44
43
@@ -79,7 +78,7 @@ impl Builder {
79
78
}
80
79
if req. path ( ) != & Url :: DEFAULT_PATH {
81
80
let _ = build. inner . as_mut ( ) . map ( |head| {
82
- head. path = req. path ( ) . clone ( ) ;
81
+ head. url . path = req. path ( ) . clone ( ) ;
83
82
} ) ;
84
83
}
85
84
@@ -301,9 +300,6 @@ impl Builder {
301
300
T : Serialize ,
302
301
{
303
302
self . inner . map ( move |mut head| {
304
- if head. path . len ( ) == 0 {
305
- head. path = head. url . path . clone ( ) ;
306
- }
307
303
let server = HeaderName :: from_static ( "User-Agent" ) ;
308
304
if !head. header . contains ( & server) {
309
305
head. header . insert ( server, "wenmeng" ) ;
@@ -328,9 +324,6 @@ impl Builder {
328
324
329
325
pub fn upgrade_http2 ( self , settings : Settings ) -> Self {
330
326
self . and_then ( move |mut head| {
331
- if head. path . len ( ) == 0 {
332
- head. path = head. url . path . clone ( ) ;
333
- }
334
327
head. header . insert ( "Connection" , "Upgrade, HTTP2-Settings" ) ;
335
328
head. header . insert ( "Upgrade" , "h2c" ) ;
336
329
head. header
@@ -390,7 +383,12 @@ where
390
383
}
391
384
392
385
pub fn set_url ( & mut self , url : Url ) {
393
- self . parts . path = url. path . clone ( ) ;
386
+ if let Some ( connect) = url. get_connect_url ( ) {
387
+ if !self . headers ( ) . contains ( & "Host" ) {
388
+ self . headers_mut ( ) . insert ( "Host" , connect. clone ( ) ) ;
389
+ }
390
+ }
391
+
394
392
self . parts . url = url;
395
393
}
396
394
@@ -425,12 +423,12 @@ where
425
423
426
424
#[ inline]
427
425
pub fn path ( & self ) -> & String {
428
- & self . parts . path
426
+ & self . parts . url . path
429
427
}
430
428
431
429
#[ inline]
432
430
pub fn set_path ( & mut self , path : String ) {
433
- self . parts . path = path;
431
+ self . parts . url . path = path;
434
432
}
435
433
436
434
pub fn scheme ( & self ) -> & Scheme {
@@ -557,7 +555,7 @@ where
557
555
Helper :: skip_empty_lines ( buffer) ?;
558
556
self . parts . method = Helper :: parse_method ( buffer) ?;
559
557
Helper :: skip_spaces ( buffer) ?;
560
- self . parts . path = Helper :: parse_token ( buffer) ?. to_string ( ) ;
558
+ let path = Helper :: parse_token ( buffer) ?. to_string ( ) ;
561
559
Helper :: skip_spaces ( buffer) ?;
562
560
self . parts . version = Helper :: parse_version ( buffer) ?;
563
561
Helper :: skip_new_line ( buffer) ?;
@@ -567,11 +565,11 @@ where
567
565
// Connect 协议, Path则为连接地址,
568
566
Method :: Connect => {
569
567
let mut url = Url :: new ( ) ;
570
- Self :: parse_connect_by_host ( & mut url, & self . parts . path ) ?;
568
+ Self :: parse_connect_by_host ( & mut url, & path) ?;
571
569
url
572
570
}
573
571
_ => {
574
- let mut url = Url :: try_from ( self . parts . path . to_string ( ) ) ?;
572
+ let mut url = Url :: try_from ( path) ?;
575
573
if url. domain . is_none ( ) {
576
574
match self . parts . header . get_host ( ) {
577
575
Some ( h) => {
@@ -643,7 +641,7 @@ where
643
641
let mut size = 0 ;
644
642
size += self . parts . method . encode ( buffer) ?;
645
643
size += buffer. put_u8 ( b' ' ) ;
646
- size += self . parts . path . serialize ( buffer) ?;
644
+ size += self . parts . url . path . serialize ( buffer) ?;
647
645
size += buffer. put_u8 ( b' ' ) ;
648
646
size += self . parts . version . encode ( buffer) ?;
649
647
size += buffer. put_slice ( "\r \n " . as_bytes ( ) ) ;
@@ -710,7 +708,7 @@ where
710
708
fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
711
709
self . parts . method . fmt ( f) ?;
712
710
f. write_str ( " " ) ?;
713
- self . parts . path . fmt ( f) ?;
711
+ self . parts . url . path . fmt ( f) ?;
714
712
f. write_str ( " " ) ?;
715
713
self . parts . version . fmt ( f) ?;
716
714
f. write_str ( "\r \n " ) ?;
@@ -726,7 +724,6 @@ impl Default for Parts {
726
724
header : HeaderMap :: new ( ) ,
727
725
version : Version :: Http11 ,
728
726
url : Url :: new ( ) ,
729
- path : String :: new ( ) ,
730
727
extensions : Extensions :: new ( ) ,
731
728
}
732
729
}
@@ -739,7 +736,6 @@ impl Clone for Parts {
739
736
header : self . header . clone ( ) ,
740
737
version : self . version . clone ( ) ,
741
738
url : self . url . clone ( ) ,
742
- path : self . path . clone ( ) ,
743
739
extensions : Extensions :: new ( ) ,
744
740
} ;
745
741
0 commit comments