diff --git a/src/handshake/client.rs b/src/handshake/client.rs index 745da90..0032691 100644 --- a/src/handshake/client.rs +++ b/src/handshake/client.rs @@ -31,7 +31,7 @@ impl ClientHandshake { /// Initiate a client handshake. pub fn start( stream: S, - request: Request, + mut request: Request, config: Option, ) -> Result> { if request.method() != http::Method::GET { @@ -49,7 +49,12 @@ impl ClientHandshake { // Check the URI scheme: only ws or wss are supported let _ = crate::client::uri_mode(request.uri())?; - let key = generate_key(); + let key = if let Some(key) = request.headers_mut().remove("Sec-WebSocket-Key") { + key.to_str()?.to_owned() + } + else { + generate_key() + }; let machine = { let req = generate_request(request, &key)?;