From 75f75e1eb09c208a42e58b2babbc55027cd79e28 Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Wed, 26 May 2021 20:54:01 +0200 Subject: [PATCH] http2: turn Host header into authority during upgrade HTTP1 uses Host, but HTTP2 uses rather :authority cf HPACK --- rust/src/http2/detect.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/rust/src/http2/detect.rs b/rust/src/http2/detect.rs index 18c9fc0825..c4b8b1c490 100644 --- a/rust/src/http2/detect.rs +++ b/rust/src/http2/detect.rs @@ -854,6 +854,13 @@ fn http2_tx_set_settings(state: &mut HTTP2State, input: &[u8]) { } } +fn http2_caseinsensitive_cmp(s1: &[u8], s2: &str) -> bool { + if let Ok(s) = std::str::from_utf8(s1) { + return s.to_lowercase() == s2; + } + return false; +} + #[no_mangle] pub unsafe extern "C" fn rs_http2_tx_add_header( state: &mut HTTP2State, name: *const u8, name_len: u32, value: *const u8, value_len: u32, @@ -862,6 +869,8 @@ pub unsafe extern "C" fn rs_http2_tx_add_header( let slice_value = build_slice!(value, value_len as usize); if slice_name == "HTTP2-Settings".as_bytes() { http2_tx_set_settings(state, slice_value) + } else if http2_caseinsensitive_cmp(slice_name, "host") { + http2_tx_set_header(state, ":authority".as_bytes(), slice_value) } else { http2_tx_set_header(state, slice_name, slice_value) }