diff options
-rw-r--r-- | src/main.rs | 3 | ||||
-rw-r--r-- | src/middleware.rs | 1 | ||||
-rw-r--r-- | src/middleware/cache_control.rs | 15 |
3 files changed, 19 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs index 252588d..372915b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,12 +7,14 @@ use tutors::fs_tutor_repo::FsTutorRepo; use std::{sync::Arc, env}; use tower_http::services::ServeDir; use posts::fs_post_repo::FsPostRepo; +use middleware::cache_control::cache_static; mod helpers; mod posts; mod tutors; mod views; mod handlers; +mod middleware; #[tokio::main] async fn main() { @@ -46,6 +48,7 @@ async fn main() { .nest_service("/assets", ServeDir::new(assets_dir)) .nest_service("/team", ServeDir::new(tutor_dir)) .fallback_service(ServeDir::new("static")) + .layer(axum::middleware::from_fn(cache_static)) .layer( TraceLayer::new_for_http() .make_span_with(trace::DefaultMakeSpan::new() diff --git a/src/middleware.rs b/src/middleware.rs new file mode 100644 index 0000000..a7d3c17 --- /dev/null +++ b/src/middleware.rs @@ -0,0 +1 @@ +pub mod cache_control; diff --git a/src/middleware/cache_control.rs b/src/middleware/cache_control.rs new file mode 100644 index 0000000..30f31ca --- /dev/null +++ b/src/middleware/cache_control.rs @@ -0,0 +1,15 @@ +use axum::extract::Request; +use axum::http::header::{HeaderValue, CACHE_CONTROL}; +use axum::middleware::Next; +use axum::response::Response; + +pub async fn cache_static(mut request: Request, next: Next) -> Response { + let was_static = request.uri().path().starts_with("/assets"); + let mut response = next.run(request).await; + + if was_static { + response.headers_mut().insert(CACHE_CONTROL, HeaderValue::from_static("max-age=3600")); + } + + response +} |