rama_http/layer/remove_header/
mod.rs

1//! Middleware for removing headers from requests and responses.
2//!
3//! See [request] and [response] for more details.
4
5use 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        // this assumes that `HeaderName::as_str` returns as lowercase
20        .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}