rama_http/layer/remove_header/
mod.rs1use crate::{header, HeaderMap, HeaderName};
6
7pub mod request;
8pub mod response;
9
10#[doc(inline)]
11pub use self::{
12 request::{RemoveRequestHeader, RemoveRequestHeaderLayer},
13 response::{RemoveResponseHeader, RemoveResponseHeaderLayer},
14};
15
16fn remove_headers_by_prefix(headers: &mut HeaderMap, prefix: &str) {
17 let keys: Vec<_> = headers
18 .keys()
19 .filter(|key| {
21 let s = key.as_str();
22 s.len() >= prefix.len() && s[..prefix.len()].eq_ignore_ascii_case(prefix)
23 })
24 .cloned()
25 .collect();
26
27 for key in keys {
28 headers.remove(key);
29 }
30}
31
32fn remove_headers_by_exact_name(headers: &mut HeaderMap, name: &HeaderName) {
33 headers.remove(name);
34}
35
36fn remove_hop_by_hop_request_headers(headers: &mut HeaderMap) {
37 for header in [
38 &header::CONNECTION,
39 &header::PROXY_CONNECTION,
40 &header::PROXY_AUTHORIZATION,
41 &header::TE,
42 &header::TRAILER,
43 &header::TRANSFER_ENCODING,
44 &header::UPGRADE,
45 &header::X_FORWARDED_FOR,
46 &header::X_FORWARDED_HOST,
47 &header::X_FORWARDED_PROTO,
48 &header::FORWARDED,
49 &header::VIA,
50 &header::CF_CONNECTING_IP,
51 &header::X_REAL_IP,
52 &header::X_CLIENT_IP,
53 &header::CLIENT_IP,
54 &header::TRUE_CLIENT_IP,
55 ] {
56 headers.remove(header);
57 }
58}
59
60fn remove_hop_by_hop_response_headers(headers: &mut HeaderMap) {
61 for header in [
62 &header::CONNECTION,
63 &header::KEEP_ALIVE,
64 &header::PROXY_AUTHENTICATE,
65 &header::TRAILER,
66 &header::TRANSFER_ENCODING,
67 &header::UPGRADE,
68 ] {
69 headers.remove(header);
70 }
71}