From: Rainer Jung Date: Tue, 12 Feb 2013 11:11:47 +0000 (+0000) Subject: mod_cache: Explicitly allow cache implementations to cache a 206 Partial X-Git-Tag: 2.2.24~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bda26f648394558eb80935953c5b65b96791b287;p=thirdparty%2Fapache%2Fhttpd.git mod_cache: Explicitly allow cache implementations to cache a 206 Partial Response if they so choose to do so. Previously an attempt to cache a 206 was arbitrarily allowed if the response contained an Expires or Cache-Control header, and arbitrarily denied if both headers were missing. Currently the disk and memory cache providers do not cache 206 Partial Responses. Backport of r952823 from trunk. Submitted by: minfrin Reviewed by: rjung, wrowe Backported by: rpluem git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1445103 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index c9ceee090bc..c3afef9cac4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,13 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.24 + *) mod_cache: Explicitly allow cache implementations to cache a 206 Partial + Response if they so choose to do so. Previously an attempt to cache a 206 + was arbitrarily allowed if the response contained an Expires or + Cache-Control header, and arbitrarily denied if both headers were missing. + Currently the disk and memory cache providers do not cache 206 Partial + Responses. [Graham Leggett] + *) core: Remove unintentional APR 1.3 dependency introduced with Apache 2.2.22. [Eric Covener] diff --git a/STATUS b/STATUS index 5a82a048887..713a6b5aa7d 100644 --- a/STATUS +++ b/STATUS @@ -94,14 +94,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_cache: Allow providers to decide whether to cache responses with code - 206. - Trunk version of patch: - http://svn.apache.org/viewvc?rev=952823&view=rev - Backport version for 2.2.x of patch: - Trunk version of patch works - +1: rpluem, rjung, wrowe - * mod_proxy_http: Use the same hostname for SNI as for the HTTP request when forwarding to SSL backends. PR: 53134 diff --git a/modules/cache/mod_cache.c b/modules/cache/mod_cache.c index 2f649ef2dbb..329b1a5afaa 100644 --- a/modules/cache/mod_cache.c +++ b/modules/cache/mod_cache.c @@ -465,16 +465,17 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in) * They are tested here one by one to be clear and unambiguous. */ if (r->status != HTTP_OK && r->status != HTTP_NON_AUTHORITATIVE + && r->status != HTTP_PARTIAL_CONTENT && r->status != HTTP_MULTIPLE_CHOICES && r->status != HTTP_MOVED_PERMANENTLY && r->status != HTTP_NOT_MODIFIED) { /* RFC2616 13.4 we are allowed to cache 200, 203, 206, 300, 301 or 410 - * We don't cache 206, because we don't (yet) cache partial responses. + * We allow the caching of 206, but a cache implementation might choose + * to decline to cache a 206 if it doesn't know how to. * 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) - && r->status != HTTP_PARTIAL_CONTENT) { + 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 @@ -487,9 +488,6 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in) * 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). - * - * But do NOT store 206 responses in any case since we - * don't (yet) cache partial responses. */ } else {