mirror of
https://github.com/apache/httpd.git
synced 2025-08-13 14:40:20 +00:00
mod_cache: Respect s-maxage as described by RFC2616 14.9.3, which must
take precedence if present. PR 35247. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1069942 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
22
modules/cache/cache_util.c
vendored
22
modules/cache/cache_util.c
vendored
@ -540,8 +540,16 @@ int cache_check_freshness(cache_handle_t *h, cache_request_rec *cache,
|
||||
maxage_req = cache->control_in.max_age_value;
|
||||
}
|
||||
|
||||
/* extract max-age from response */
|
||||
maxage_cresp = h->cache_obj->info.control.max_age_value;
|
||||
/*
|
||||
* extract max-age from response, if both s-maxage and max-age, s-maxage
|
||||
* takes priority
|
||||
*/
|
||||
if (smaxage != -1) {
|
||||
maxage_cresp = smaxage;
|
||||
}
|
||||
else {
|
||||
maxage_cresp = h->cache_obj->info.control.max_age_value;
|
||||
}
|
||||
|
||||
/*
|
||||
* if both maxage request and response, the smaller one takes priority
|
||||
@ -585,15 +593,14 @@ int cache_check_freshness(cache_handle_t *h, cache_request_rec *cache,
|
||||
minfresh = 0;
|
||||
}
|
||||
|
||||
/* override maxstale if must-revalidate or proxy-revalidate */
|
||||
/* override maxstale if must-revalidate, proxy-revalidate or s-maxage */
|
||||
if (maxstale && (h->cache_obj->info.control.must_revalidate
|
||||
|| h->cache_obj->info.control.proxy_revalidate)) {
|
||||
|| h->cache_obj->info.control.proxy_revalidate || smaxage != -1)) {
|
||||
maxstale = 0;
|
||||
}
|
||||
|
||||
/* handle expiration */
|
||||
if (((smaxage != -1) && (age < (smaxage - minfresh))) ||
|
||||
((maxage != -1) && (age < (maxage + maxstale - minfresh))) ||
|
||||
if (((maxage != -1) && (age < (maxage + maxstale - minfresh))) ||
|
||||
((smaxage == -1) && (maxage == -1) &&
|
||||
(info->expire != APR_DATE_BAD) &&
|
||||
(age < (apr_time_sec(info->expire - info->date) + maxstale - minfresh)))) {
|
||||
@ -606,8 +613,7 @@ int cache_check_freshness(cache_handle_t *h, cache_request_rec *cache,
|
||||
apr_psprintf(r->pool, "%lu", (unsigned long)age));
|
||||
|
||||
/* add warning if maxstale overrode freshness calculation */
|
||||
if (!(((smaxage != -1) && age < smaxage) ||
|
||||
((maxage != -1) && age < maxage) ||
|
||||
if (!(((maxage != -1) && age < maxage) ||
|
||||
(info->expire != APR_DATE_BAD &&
|
||||
(apr_time_sec(info->expire - info->date)) > age))) {
|
||||
/* make sure we don't stomp on a previous warning */
|
||||
|
Reference in New Issue
Block a user