From 17df062a0ad15a5f640897174c8e5fa84e391194 Mon Sep 17 00:00:00 2001 From: Daniel Earl Poirier Date: Fri, 9 Oct 2009 12:58:09 +0000 Subject: [PATCH] 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 --- CHANGES | 3 +++ modules/cache/mod_cache.c | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) 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 */ -- 2.40.0