]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Committing the following that was voted in:
authorPaul J. Reder <rederpj@apache.org>
Thu, 18 Dec 2008 00:25:16 +0000 (00:25 +0000)
committerPaul J. Reder <rederpj@apache.org>
Thu, 18 Dec 2008 00:25:16 +0000 (00:25 +0000)
When an expires or cache-control header are sent, the RFC does allow us to cache normally non-cacheable response statuses.
Submitted by: Alex Polvi <alex polvi.net>

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@727599 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
modules/cache/mod_cache.c

diff --git a/CHANGES b/CHANGES
index 0bbf070c1b7643d8104d2dbe6f807862bc048b96..0c2a0f81bec9358311cbe69a5b0c6685799ec0d3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.2.12
 
+  *) 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>]
 
 Changes with Apache 2.2.11
 
diff --git a/STATUS b/STATUS
index 4dbade9b481f9d5ad8082a8de91c500ff211b0af..9ddc875b79d952b3ef8050cfad2999ac0eedbd61 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -89,16 +89,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
   [ New proposals should be added at the end of the list ]
 
-
- * mod_cache: When an expires or cache-control header are sent, the RFC does
-   allow us to cache normally non-cacheable response statuses.
-   PR 46346.
-   Trunk version of patch:
-      http://svn.apache.org/viewvc?rev=724093&view=rev
-   Backport version for 2.2.x of patch:
-      Trunk version of patch works
-   +1: rpluem, covener, rederpj
-
  * mod_cache: Correctly save Content-Encoding of cachable entity. PR 46401
    [Dan Poirier <poirier pobox.com>]
    Trunk version of patch (committed by rpluem):
index 27df70d436bbb48f317ffe5a1eee27b1adaa68f8..257536e2332e19c6585ad4e8a50722e8135ae466 100644 (file)
@@ -440,7 +440,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 */