From 75b01c802cef9ff1d0e5e54ccaa86279889d869c Mon Sep 17 00:00:00 2001 From: Heinz Gies Date: Wed, 11 Sep 2019 17:23:09 +0200 Subject: [PATCH] Fix ws client to upgrade with proper host headers --- awc/src/ws.rs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/awc/src/ws.rs b/awc/src/ws.rs index 77cbc7ca4..54b0d377f 100644 --- a/awc/src/ws.rs +++ b/awc/src/ws.rs @@ -234,10 +234,30 @@ impl WebsocketsRequest { } if !self.head.headers.contains_key(header::HOST) { - self.head.headers.insert( - header::HOST, - HeaderValue::from_str(uri.host().unwrap()).unwrap(), - ); + let port = uri.port_u16(); + let scheme = uri.scheme(); + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html + // requires us to include the port if it's not standard + let needs_port = ((scheme == Some("http") || scheme == Some("ws")) + && port != Some(80)) + || ((scheme == Some("https") || scheme == Some("wss")) + && port != Some(443)); + if needs_port { + self.head.headers.insert( + header::HOST, + HeaderValue::from_str(&format!( + "{}:{}", + uri.host().unwrap(), + port.unwrap() + )) + .unwrap(), + ); + } else { + self.head.headers.insert( + header::HOST, + HeaderValue::from_str(uri.host().unwrap()).unwrap(), + ); + }; } // set cookies