Commit 373dc75a authored by Justin Erenkrantz's avatar Justin Erenkrantz
Browse files

mod_disk_cache: When renegotiating an already cached Vary'd response, do not

let us later throw away the renegotiated content due to a name mismatch.

We do not need to update the ->name field just before writing the headers as
the computed ->name on open and create is sufficient.  Updating ->name here is
essentially a no-op - except in the case of Vary where the key has internally
changed (to account for the Vary prefix), but the original name has not.
However, writing the Vary'd-accounted key means that when we read the cache
next that we will error out and disregard the just renegotiated response and
fetch the content all over again - oops!

(This is largely a case where I think we may have overthought ourselves; hence
the explanation is here in the commit rather than in the file itself.)

* modules/cache/mod_disk_cache.c
  (store_headers): The originally opened ->name is sufficient.
* CHANGES: Combined with r538992, note that renegotiation for Vary's seem to
  work far better.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@538997 13f79535-47bb-0310-9956-ffa450edef68
parent cef18472
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -2,6 +2,9 @@
Changes with Apache 2.3.0
  [Remove entries to the current 2.0 and 2.2 section below, when backported]
  *) mod_disk_cache: Allow Vary'd responses to be refreshed properly.
     [Justin Erenkrantz]
  *) mod_cache: Allow caching of requests with query arguments when
     Cache-Control max-age is explicitly specified.  [Justin Erenkrantz]
+0 −2
Original line number Diff line number Diff line
@@ -903,8 +903,6 @@ static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info
        return rv;
    }

    dobj->name = h->cache_obj->key;

    disk_info.format = DISK_FORMAT_VERSION;
    disk_info.date = info->date;
    disk_info.expire = info->expire;