From: Graham Leggett <minfrin@apache.org> Date: Sat, 12 Nov 2011 21:24:47 +0000 (+0000) Subject: mod_cache: Make sure we merge headers correctly when we handle a non X-Git-Tag: 2.5.0-alpha~7913 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d4780b88c95d8b1c2d8724a1491ed25eb4645c2e;p=apache mod_cache: Make sure we merge headers correctly when we handle a non cacheable conditional response. PR52120. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1201331 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index a0df1b9bcd..b611a77d66 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.3.16 + *) mod_cache: Make sure we merge headers correctly when we handle a + non cacheable conditional response. PR52120. [Graham Leggett] + *) core: Set MaxMemFree 2048 by default. [Stefan Fritsch] *) mpm_event: Fix assertion failure during very high load. [Stefan Fritsch] diff --git a/modules/cache/mod_cache.c b/modules/cache/mod_cache.c index b97a21c285..af7be13523 100644 --- a/modules/cache/mod_cache.c +++ b/modules/cache/mod_cache.c @@ -1081,6 +1081,20 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in) APR_BRIGADE_INSERT_TAIL(bb, bkt); } else { + /* RFC 2616 10.3.5 states that entity headers are not supposed + * to be in the 304 response. Therefore, we need to combine the + * response headers with the cached headers *before* we update + * the cached headers. + * + * However, before doing that, we need to first merge in + * err_headers_out and we also need to strip any hop-by-hop + * headers that might have snuck in. + */ + r->headers_out = ap_cache_cacheable_headers_out(r); + + /* Merge in our cached headers. However, keep any updated values. */ + cache_accept_headers(cache->handle, r, 1); + cache->provider->recall_body(cache->handle, r->pool, bb); bkt = apr_bucket_eos_create(bb->bucket_alloc);