Skip to content

Commit c9a7eb7

Browse files
committed
allow configurable forbidden header
When the HTTP library is not used as a proxy, removing of the forbidden headers by default may not make sense. This change makes it configurable via the `WasiHttpView`, which keeps the default behavior.
1 parent aec935f commit c9a7eb7

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

crates/wasi-http/src/types.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ pub trait WasiHttpView: IoView {
121121
}
122122

123123
/// Whether a given header should be considered forbidden and not allowed.
124-
fn is_forbidden_header(&mut self, _name: &HeaderName) -> bool {
125-
false
124+
fn is_forbidden_header(&mut self, name: &HeaderName) -> bool {
125+
is_default_forbidden_header(name)
126126
}
127127

128128
/// Number of distinct write calls to the outgoing body's output-stream
@@ -269,8 +269,8 @@ impl<T: WasiHttpView> WasiHttpView for WasiHttpImpl<T> {
269269
}
270270
}
271271

272-
/// Returns `true` when the header is forbidden according to this [`WasiHttpView`] implementation.
273-
pub(crate) fn is_forbidden_header(view: &mut dyn WasiHttpView, name: &HeaderName) -> bool {
272+
/// Returns `true` when the header is forbidden according to the default list.
273+
pub(crate) fn is_default_forbidden_header(name: &HeaderName) -> bool {
274274
static FORBIDDEN_HEADERS: [HeaderName; 9] = [
275275
hyper::header::CONNECTION,
276276
HeaderName::from_static("keep-alive"),
@@ -283,7 +283,7 @@ pub(crate) fn is_forbidden_header(view: &mut dyn WasiHttpView, name: &HeaderName
283283
HeaderName::from_static("http2-settings"),
284284
];
285285

286-
FORBIDDEN_HEADERS.contains(name) || view.is_forbidden_header(name)
286+
FORBIDDEN_HEADERS.contains(name)
287287
}
288288

289289
/// Removes forbidden headers from a [`hyper::HeaderMap`].
@@ -292,7 +292,7 @@ pub(crate) fn remove_forbidden_headers(
292292
headers: &mut hyper::HeaderMap,
293293
) {
294294
let forbidden_keys = Vec::from_iter(headers.keys().filter_map(|name| {
295-
if is_forbidden_header(view, name) {
295+
if view.is_forbidden_header(name) {
296296
Some(name.clone())
297297
} else {
298298
None

crates/wasi-http/src/types_impl.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::{
77
types::{
88
FieldMap, HostFields, HostFutureIncomingResponse, HostIncomingRequest,
99
HostIncomingResponse, HostOutgoingRequest, HostOutgoingResponse, HostResponseOutparam,
10-
is_forbidden_header, remove_forbidden_headers,
10+
remove_forbidden_headers,
1111
},
1212
};
1313
use anyhow::{Context, anyhow};
@@ -125,7 +125,7 @@ where
125125
Err(_) => return Ok(Err(types::HeaderError::InvalidSyntax)),
126126
};
127127

128-
if is_forbidden_header(self, &header) {
128+
if self.is_forbidden_header(&header) {
129129
return Ok(Err(types::HeaderError::Forbidden));
130130
}
131131

@@ -196,7 +196,7 @@ where
196196
Err(_) => return Ok(Err(types::HeaderError::InvalidSyntax)),
197197
};
198198

199-
if is_forbidden_header(self, &header) {
199+
if self.is_forbidden_header(&header) {
200200
return Ok(Err(types::HeaderError::Forbidden));
201201
}
202202

@@ -228,7 +228,7 @@ where
228228
Err(_) => return Ok(Err(types::HeaderError::InvalidSyntax)),
229229
};
230230

231-
if is_forbidden_header(self, &header) {
231+
if self.is_forbidden_header(&header) {
232232
return Ok(Err(types::HeaderError::Forbidden));
233233
}
234234

@@ -248,7 +248,7 @@ where
248248
Err(_) => return Ok(Err(types::HeaderError::InvalidSyntax)),
249249
};
250250

251-
if is_forbidden_header(self, &header) {
251+
if self.is_forbidden_header(&header) {
252252
return Ok(Err(types::HeaderError::Forbidden));
253253
}
254254

0 commit comments

Comments
 (0)