1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-28 16:20:57 -05:00

perf(http): avoid per header alloc (#14051)

This commit is contained in:
Aaron O'Mullan 2022-03-21 12:56:30 +01:00 committed by GitHub
parent 1414dc503b
commit 45ef3c91c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -517,50 +517,36 @@ async fn op_http_write_headers(
builder.headers_mut().unwrap().reserve(headers.len()); builder.headers_mut().unwrap().reserve(headers.len());
for (key, value) in &headers { for (key, value) in &headers {
match &*key.to_ascii_lowercase() { if key.eq_ignore_ascii_case(b"cache-control") {
b"cache-control" => { if let Ok(value) = std::str::from_utf8(value) {
if let Ok(value) = std::str::from_utf8(value) { if let Some(cache_control) = CacheControl::from_value(value) {
if let Some(cache_control) = CacheControl::from_value(value) { // We skip compression if the cache-control header value is set to
// We skip compression if the cache-control header value is set to // "no-transform"
// "no-transform" if cache_control.no_transform {
if cache_control.no_transform { headers_allow_compression = false;
headers_allow_compression = false;
}
} }
} else {
headers_allow_compression = false;
} }
} } else {
b"content-range" => {
// we skip compression if the `content-range` header value is set, as it
// indicates the contents of the body were negotiated based directly
// with the user code and we can't compress the response
headers_allow_compression = false;
}
b"content-type" => {
if !value.is_empty() {
content_type_header = Some(value);
}
}
b"content-encoding" => {
// we don't compress if a content-encoding header was provided
headers_allow_compression = false; headers_allow_compression = false;
} }
} else if key.eq_ignore_ascii_case(b"content-range") {
// we skip compression if the `content-range` header value is set, as it
// indicates the contents of the body were negotiated based directly
// with the user code and we can't compress the response
headers_allow_compression = false;
} else if key.eq_ignore_ascii_case(b"content-type") && !value.is_empty() {
content_type_header = Some(value);
} else if key.eq_ignore_ascii_case(b"content-encoding") {
// we don't compress if a content-encoding header was provided
headers_allow_compression = false;
} else if key.eq_ignore_ascii_case(b"etag") && !value.is_empty() {
// we store the values of ETag and Vary and skip adding them for now, as // we store the values of ETag and Vary and skip adding them for now, as
// we may need to modify or change. // we may need to modify or change.
b"etag" => { etag_header = Some(value);
if !value.is_empty() { continue;
etag_header = Some(value); } else if key.eq_ignore_ascii_case(b"vary") && !value.is_empty() {
continue; vary_header = Some(value);
} continue;
}
b"vary" => {
if !value.is_empty() {
vary_header = Some(value);
continue;
}
}
_ => {}
} }
builder = builder.header(key.as_ref(), value.as_ref()); builder = builder.header(key.as_ref(), value.as_ref());
} }