From: Daniel Earl Poirier Date: Fri, 9 Oct 2009 12:58:09 +0000 (+0000) Subject: mod_cache: add Cache-control: s-maxage to cacheability decisions per RFC 2616. X-Git-Tag: 2.3.3~183 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=17df062a0ad15a5f640897174c8e5fa84e391194;p=apache mod_cache: add Cache-control: s-maxage to cacheability decisions per RFC 2616. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@823536 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 7abfc2b949..bab6290cba 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,9 @@ Changes with Apache 2.3.3 mod_proxy_ftp: NULL pointer dereference on error paths. [Stefan Fritsch , Joe Orton] + *) mod_cache: correctly consider s-maxage in cacheability + decisions. [Dan Poirier] + *) mod_logio/core: Report more accurate byte counts in mod_status if mod_logio is loaded. PR 25656. [Stefan Fritsch] diff --git a/modules/cache/mod_cache.c b/modules/cache/mod_cache.c index 78472c3358..27bf3368fa 100644 --- a/modules/cache/mod_cache.c +++ b/modules/cache/mod_cache.c @@ -767,7 +767,8 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in) reason = "Expires header already expired, not cacheable"; } else if (!conf->ignorequerystring && r->parsed_uri.query && exps == NULL && - !ap_cache_liststr(NULL, cc_out, "max-age", NULL)) { + !ap_cache_liststr(NULL, cc_out, "max-age", NULL) && + !ap_cache_liststr(NULL, cc_out, "s-maxage", NULL)) { /* if a query string is present but no explicit expiration time, * don't cache it (RFC 2616/13.9 & 13.2.1) */ @@ -781,14 +782,17 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in) reason = "HTTP Status 304 Not Modified"; } else if (r->status == HTTP_OK && lastmods == NULL && etag == NULL - && (exps == NULL) && (conf->no_last_mod_ignore ==0)) { + && (exps == NULL) && (conf->no_last_mod_ignore ==0) && + !ap_cache_liststr(NULL, cc_out, "max-age", NULL) && + !ap_cache_liststr(NULL, cc_out, "s-maxage", NULL)) { /* 200 OK response from HTTP/1.0 and up without Last-Modified, - * Etag, or Expires headers. + * Etag, Expires, Cache-Control:max-age, or Cache-Control:s-maxage + * headers. */ /* Note: mod-include clears last_modified/expires/etags - this * is why we have an optional function for a key-gen ;-) */ - reason = "No Last-Modified, Etag, or Expires headers"; + reason = "No Last-Modified, Etag, Expires, Cache-Control:max-age or Cache-Control:s-maxage headers"; } else if (r->header_only && !cache->stale_handle) { /* Forbid HEAD requests unless we have it cached already */