]> granicus.if.org Git - apache/commitdiff
When an expires or cache-control header are sent, the RFC does allow us to cache...
authorPaul Querna <pquerna@apache.org>
Sun, 7 Dec 2008 06:33:02 +0000 (06:33 +0000)
committerPaul Querna <pquerna@apache.org>
Sun, 7 Dec 2008 06:33:02 +0000 (06:33 +0000)
Submitted by: Alex Polvi <alex polvi.net>

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@724093 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/cache/mod_cache.c

diff --git a/CHANGES b/CHANGES
index c8a1fb8739ddfd0e94496a666f9599f3f355ab30..ed982bc7b2598b648dec2fc094f0720feb1a46d9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                         -*- coding: utf-8 -*-
 Changes with Apache 2.3.0
 [ When backported to 2.2.x, remove entry from this file ]
+  *) mod_cache: When an explicit Expires or Cache-Control header is set, cache 
+     normally non-cacheable response statuses. PR 46346. 
+     [Alex Polvi <alex polvi.net>]
 
   *) mod_ratelimit: New module to do bandwidth rate limiting. [Paul Querna]
 
index 945adb6b7b5154c39c074d341a706ba56d149ccf..dce16fe457968b50466a9bfb6a6b4ebc4f25936a 100644 (file)
@@ -438,7 +438,28 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in)
          * We include 304 Not Modified here too as this is the origin server
          * telling us to serve the cached copy.
          */
-        reason = apr_psprintf(p, "Response status %d", r->status);
+        if (exps != NULL || cc_out != NULL) {
+            /* We are also allowed to cache any response given that it has a 
+             * valid Expires or Cache Control header. If we find a either of 
+             * those here,  we pass request through the rest of the tests. From 
+             * the RFC:
+             *
+             * A response received with any other status code (e.g. status 
+             * codes 302 and 307) MUST NOT be returned in a reply to a 
+             * subsequent request unless there are cache-control directives or 
+             * another header(s) that explicitly allow it. For example, these 
+             * include the following: an Expires header (section 14.21); a 
+             * "max-age", "s-maxage",  "must-revalidate", "proxy-revalidate", 
+             * "public" or "private" cache-control directive (section 14.9).
+             */
+        }
+        else {
+            reason = apr_psprintf(p, "Response status %d", r->status);
+        }
+    }
+
+    if (reason) {
+        /* noop */
     }
     else if (exps != NULL && exp == APR_DATE_BAD) {
         /* if a broken Expires header is present, don't cache it */