On 04 Jun 2010, at 4:15 PM, Plüm, Rüdiger, VF-Group wrote:

cache implementation to be given the opportunity to cache a 206, if

Right, RFC2616 permits caching 206's.

What I have in mind is this below. mod_cache supports the caching of a 206, but mod_disk_cache chooses not to. Once backported to 2.2, this will fix the current problem where if a 206 arrives, and contains an Expires or Cache-Control header, it gets cached.

Index: modules/cache/mod_cache.c
===================================================================
--- modules/cache/mod_cache.c   (revision 951708)
+++ modules/cache/mod_cache.c   (working copy)
@@ -726,16 +726,17 @@
      * 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
@@ -748,9 +749,6 @@
* 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 {

Regards,
Graham
--

Reply via email to