Fix Websocket: Perform case insensitive matching during upgrade

This commit is contained in:
Maurus Decimus
2026-05-19 17:29:12 +02:00
parent 915900d0c5
commit e54221dde6
2 changed files with 12 additions and 7 deletions

View File

@@ -31,14 +31,18 @@ impl WebSocketUpgrade for Server {
session: HttpSessionData,
) -> trc::Result<HttpResponse> {
let headers = req.headers();
if headers
.get(hyper::header::CONNECTION)
.and_then(|h| h.to_str().ok())
!= Some("Upgrade")
|| headers
.get(hyper::header::UPGRADE)
let header_has_token = |name: hyper::header::HeaderName, token: &str| {
headers
.get(name)
.and_then(|h| h.to_str().ok())
!= Some("websocket")
.is_some_and(|value| {
value
.split(',')
.any(|part| part.trim().eq_ignore_ascii_case(token))
})
};
if !header_has_token(hyper::header::CONNECTION, "Upgrade")
|| !header_has_token(hyper::header::UPGRADE, "websocket")
{
return Err(trc::ResourceEvent::BadParameters
.into_err()