From 3dfd1b4944596f118b9061b6766940ad738496ad Mon Sep 17 00:00:00 2001 From: Graham Leggett Date: Sat, 12 Nov 2011 21:34:40 +0000 Subject: [PATCH] Backport 1201331: 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/branches/2.4.x@1201332 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 3 +++ modules/cache/mod_cache.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/CHANGES b/CHANGES index 5a71c06d9c..df4d48451b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.4.0 + *) mod_cache: Make sure we merge headers correctly when we handle a + non cacheable conditional response. PR52120. [Graham Leggett] + *) Pre GA removal of components that will not be included: - mod_noloris was superseded by mod_reqtimeout - mod_serf 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); -- 2.40.0