Skip to content

Commit

Permalink
refactor: optimize cache control headers file type detection (#175)
Browse files Browse the repository at this point in the history
  • Loading branch information
mfontanini authored Feb 22, 2023
1 parent 40a532e commit b2cff1b
Showing 1 changed file with 22 additions and 12 deletions.
34 changes: 22 additions & 12 deletions src/control_headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,12 @@ pub fn append_headers(uri: &str, resp: &mut Response<Body>) {
// Default max-age value in seconds (one day)
let mut max_age = MAX_AGE_ONE_DAY;

if CACHE_EXT_ONE_HOUR
.iter()
.any(|x| uri.ends_with(&[".", *x].concat()))
{
max_age = MAX_AGE_ONE_HOUR;
} else if CACHE_EXT_ONE_YEAR
.iter()
.any(|x| uri.ends_with(&[".", *x].concat()))
{
max_age = MAX_AGE_ONE_YEAR;
if let Some(extension) = uri_file_extension(uri) {
if CACHE_EXT_ONE_HOUR.binary_search(&extension).is_ok() {
max_age = MAX_AGE_ONE_HOUR;
} else if CACHE_EXT_ONE_YEAR.binary_search(&extension).is_ok() {
max_age = MAX_AGE_ONE_YEAR;
}
}

let cache_control = CacheControl::new()
Expand All @@ -44,13 +40,20 @@ fn duration_from_secs(secs: u64) -> std::time::Duration {
std::time::Duration::from_secs(std::cmp::min(secs, u32::MAX as u64))
}

/// Gets the file extension for a URI.
///
/// This assumes the extension contains a single dot. e.g. for "/file.tar.gz" it returns "gz".
fn uri_file_extension(uri: &str) -> Option<&str> {
uri.rsplit_once('.').map(|(_, rest)| rest)
}

#[cfg(test)]
mod tests {
use hyper::{Body, Response, StatusCode};

use super::{
append_headers, CACHE_EXT_ONE_HOUR, CACHE_EXT_ONE_YEAR, MAX_AGE_ONE_DAY, MAX_AGE_ONE_HOUR,
MAX_AGE_ONE_YEAR,
append_headers, uri_file_extension, CACHE_EXT_ONE_HOUR, CACHE_EXT_ONE_YEAR,
MAX_AGE_ONE_DAY, MAX_AGE_ONE_HOUR, MAX_AGE_ONE_YEAR,
};

#[tokio::test]
Expand Down Expand Up @@ -101,4 +104,11 @@ mod tests {
);
}
}

#[test]
fn find_uri_extension() {
assert_eq!(uri_file_extension("/potato.zip"), Some("zip"));
assert_eq!(uri_file_extension("/potato."), Some(""));
assert_eq!(uri_file_extension("/"), None);
}
}

0 comments on commit b2cff1b

Please sign in to comment.