diff --git a/actix-http/src/h1/decoder.rs b/actix-http/src/h1/decoder.rs index c9d3edf33..492783315 100644 --- a/actix-http/src/h1/decoder.rs +++ b/actix-http/src/h1/decoder.rs @@ -46,7 +46,7 @@ impl Decoder for MessageDecoder { pub(crate) enum PayloadLength { Payload(PayloadType), - Upgrade, + UpgradeWebSocket, None, } @@ -65,7 +65,7 @@ pub(crate) trait MessageType: Sized { raw_headers: &[HeaderIndex], ) -> Result { let mut ka = None; - let mut has_upgrade = false; + let mut has_upgrade_websocket = false; let mut expect = false; let mut chunked = false; let mut content_length = None; @@ -124,12 +124,9 @@ pub(crate) trait MessageType: Sized { }; } header::UPGRADE => { - has_upgrade = true; - // check content-length, some clients (dart) - // sends "content-length: 0" with websocket upgrade if let Ok(val) = value.to_str().map(|val| val.trim()) { if val.eq_ignore_ascii_case("websocket") { - content_length = None; + has_upgrade_websocket = true; } } } @@ -156,13 +153,13 @@ pub(crate) trait MessageType: Sized { Ok(PayloadLength::Payload(PayloadType::Payload( PayloadDecoder::chunked(), ))) + } else if has_upgrade_websocket { + Ok(PayloadLength::UpgradeWebSocket) } else if let Some(len) = content_length { // Content-Length Ok(PayloadLength::Payload(PayloadType::Payload( PayloadDecoder::length(len), ))) - } else if has_upgrade { - Ok(PayloadLength::Upgrade) } else { Ok(PayloadLength::None) } @@ -222,7 +219,7 @@ impl MessageType for Request { // payload decoder let decoder = match length { PayloadLength::Payload(pl) => pl, - PayloadLength::Upgrade => { + PayloadLength::UpgradeWebSocket => { // upgrade(websocket) PayloadType::Stream(PayloadDecoder::eof()) }