1pub const X_FORWARDED_FOR: &str = "x-forwarded-for";
8
9pub const X_REAL_IP: &str = "x-real-ip";
11
12pub const FORWARDED: &str = "forwarded";
14
15pub const AUTHORIZATION: &str = "authorization";
17
18pub const WWW_AUTHENTICATE: &str = "www-authenticate";
20
21pub const CONTENT_TYPE: &str = "content-type";
23
24pub const HOST: &str = "host";
26
27pub const CONTENT_LENGTH: &str = "content-length";
29
30pub const CONNECTION: &str = "connection";
32
33pub const KEEP_ALIVE: &str = "keep-alive";
35
36pub const PROXY_AUTHENTICATE: &str = "proxy-authenticate";
38
39pub const PROXY_AUTHORIZATION: &str = "proxy-authorization";
41
42pub const TE: &str = "te";
44
45pub const TRAILERS: &str = "trailers";
47
48pub const TRANSFER_ENCODING: &str = "transfer-encoding";
50
51pub const UPGRADE: &str = "upgrade";
53
54pub const HOP_BY_HOP_HEADERS: &[&str] = &[
56 CONNECTION,
57 KEEP_ALIVE,
58 PROXY_AUTHENTICATE,
59 PROXY_AUTHORIZATION,
60 TE,
61 TRAILERS,
62 TRANSFER_ENCODING,
63 UPGRADE,
64];
65
66pub fn is_hop_by_hop(header_name: &str) -> bool {
88 HOP_BY_HOP_HEADERS
89 .iter()
90 .any(|h| h.eq_ignore_ascii_case(header_name))
91}
92
93#[cfg(test)]
94mod tests {
95 use super::*;
96
97 #[test]
98 fn test_hop_by_hop_headers() {
99 assert!(is_hop_by_hop(CONNECTION));
100 assert!(is_hop_by_hop(KEEP_ALIVE));
101 assert!(is_hop_by_hop(PROXY_AUTHENTICATE));
102 assert!(is_hop_by_hop(PROXY_AUTHORIZATION));
103 assert!(is_hop_by_hop(TE));
104 assert!(is_hop_by_hop(TRAILERS));
105 assert!(is_hop_by_hop(TRANSFER_ENCODING));
106 assert!(is_hop_by_hop(UPGRADE));
107 }
108
109 #[test]
110 fn test_not_hop_by_hop_headers() {
111 assert!(!is_hop_by_hop(CONTENT_TYPE));
112 assert!(!is_hop_by_hop(HOST));
113 assert!(!is_hop_by_hop(CONTENT_LENGTH));
114 assert!(!is_hop_by_hop(X_FORWARDED_FOR));
115 assert!(!is_hop_by_hop(X_REAL_IP));
116 assert!(!is_hop_by_hop(FORWARDED));
117 assert!(!is_hop_by_hop("authorization"));
118 assert!(!is_hop_by_hop("accept"));
119 }
120
121 #[test]
122 fn test_header_constants_lowercase() {
123 assert_eq!(X_FORWARDED_FOR, X_FORWARDED_FOR.to_lowercase());
125 assert_eq!(X_REAL_IP, X_REAL_IP.to_lowercase());
126 assert_eq!(FORWARDED, FORWARDED.to_lowercase());
127 assert_eq!(CONTENT_TYPE, CONTENT_TYPE.to_lowercase());
128 assert_eq!(HOST, HOST.to_lowercase());
129 assert_eq!(CONTENT_LENGTH, CONTENT_LENGTH.to_lowercase());
130 }
131}