Commit b5723723 authored by Paul Querna's avatar Paul Querna
Browse files

When an expires or cache-control header are sent, the RFC does allow us to...

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/trunk@724093 13f79535-47bb-0310-9956-ffa450edef68
parent 66dd7d83
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@
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]

  *) Remove X-Pad header which was added as a work around to a bug in 
+22 −1
Original line number Diff line number Diff line
@@ -438,8 +438,29 @@ 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.
         */
        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 */
        reason = apr_pstrcat(p, "Broken expires header: ", exps, NULL);