This commit is contained in:
Mateusz Gruszczyński committed 2026-10-22 14:20:03 +02:00
1 parent 133d2f0f91
commit 3ea00045bf
27 files changed
+446 -136

No files matched your search

+8 -4
View File
@@ -178,7 +178,8 @@ let original_policy = cache_plan.request_policy(
);
let only_cached =
cache_settings.active_for(route.cache) && crate::cache::only_if_cached(request.headers());
cache_settings.active_for(route.cache) && !cache_settings.varnish_compatible
&& crate::cache::only_if_cached(request.headers());
let origin_suffix = match route.rewritten_path(&path) {
Ok(None) => public_suffix.clone(),
Ok(Some(rewritten)) => {
@@ -296,7 +297,7 @@ let cache_ticket = if effective_cacheable {
cache_route,
&public_suffix,
key_headers,
)
).map(|ticket| ticket.with_varnish_compatible(cache_settings.varnish_compatible))
} else {
None
};
@@ -308,14 +309,17 @@ let cached_revalidation = if let Some(ticket) = cache_ticket.as_ref() {
} else {
None
};
let freshness_headers = crate::cache::request_freshness_headers(
&client_conditionals, cache_settings,
);
let freshness_revalidation_reason = cached_revalidation
.as_ref()
.and_then(|cached| cached.request_freshness_revalidation_reason(&client_conditionals));
.and_then(|cached| cached.request_freshness_revalidation_reason(&freshness_headers));
let pending_revalidation = revalidation_reason.is_some()
|| freshness_revalidation_reason.is_some()
|| cached_revalidation
.as_ref()
.is_some_and(|cached| !cached.reusable_for_request(&client_conditionals));
.is_some_and(|cached| !cached.reusable_for_request(&freshness_headers));
let miss_recorded = false;
(
backend, backend_lease, affinity_cookie, admin_control_plane, cache_settings,
+1 -1
View File
@@ -130,7 +130,7 @@ let origin_reason = (cache_ticket.is_some() && origin_plan.is_none()).then(|| {
if ignore_static_cookie && crate::cache::varies_on(response.headers(), "cookie") {
"response_vary_cookie"
} else {
crate::cache::response_reason(response.status(), response.headers())
crate::cache::response_reason(response.status(), response.headers(), cache_settings)
}
});
let origin_no_transform = crate::transform::no_transform(response.headers());
+7 -2
View File
@@ -64,6 +64,7 @@
state.cache.revision(), scope, context.scheme,
original_host.to_str().unwrap_or(""), &route.id, &public_suffix,
key_headers.as_ref().unwrap_or(&request_headers))
.map(|ticket| ticket.with_varnish_compatible(cache_settings.varnish_compatible))
} else { None };
let range = cache_plan::range_selection(eligible, &request_method, &request_headers);
let if_range = if eligible { request_headers.get("if-range").cloned() } else { None };
@@ -71,9 +72,12 @@
let cached_revalidation = if let Some(ticket) = cache_ticket.as_ref() {
state.cache.revalidation_tiered(ticket).await
} else { None };
let freshness_headers = crate::cache::request_freshness_headers(
&request_headers, cache_settings,
);
let needs_validation = policy.revalidation_reason().is_some()
|| cached_revalidation.as_ref().is_some_and(|cached|
!cached.reusable_for_request(&request_headers));
!cached.reusable_for_request(&freshness_headers));
if let Some(ticket) = &cache_ticket {
if !needs_validation {
if let Some(mut hit) = state.cache.get_tiered(ticket, cache_settings).await {
@@ -109,7 +113,8 @@
}
}
}
if cache_ticket.is_some() && crate::cache::only_if_cached(&request_headers) {
if cache_ticket.is_some() && !cache_settings.varnish_compatible
&& crate::cache::only_if_cached(&request_headers) {
return error(StatusCode::GATEWAY_TIMEOUT,
"RustProxy: only-if-cached request has no usable Web Server representation\n");
}