perf(http): avoid per header alloc
@@ -517,8 +517,7 @@ async fn op_http_write_headers(
builder.headers_mut().unwrap().reserve(headers.len());
for (key, value) in &headers {
- match &*key.to_ascii_lowercase() {
- b"cache-control" => {
+ if key.eq_ignore_ascii_case(b"cache-control") {
if let Ok(value) = std::str::from_utf8(value) {
if let Some(cache_control) = CacheControl::from_value(value) {
// We skip compression if the cache-control header value is set to
@@ -530,38 +529,25 @@ async fn op_http_write_headers(
} else {
headers_allow_compression = false;
}
- }
- b"content-range" => {
+ } 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;
- }
- b"content-type" => {
- if !value.is_empty() {
+ } else if key.eq_ignore_ascii_case(b"content-type") && !value.is_empty() {
content_type_header = Some(value);
- }
- }
- b"content-encoding" => {
+ } 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 may need to modify or change.
- b"etag" => {
- if !value.is_empty() {
etag_header = Some(value);
continue;
- }
- }
- b"vary" => {
- if !value.is_empty() {
+ } else if key.eq_ignore_ascii_case(b"vary") && !value.is_empty() {
vary_header = Some(value);
continue;
}
- }
- _ => {}
- }
builder = builder.header(key.as_ref(), value.as_ref());
}
