]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: cache: do not force the TX_CACHEABLE flag before checking cacheability
authorWilly Tarreau <w@1wt.eu>
Thu, 21 Dec 2017 14:59:17 +0000 (15:59 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 22 Dec 2017 14:49:15 +0000 (15:49 +0100)
The cache used to set this flag before calling
check_response_for_cacheability() due to the way the flags were previously
set (too late), but this is a bad idea as it loses the information of the
implicit caching rules related to the method and the status code. Let's
only rely on what was determined during the request and response parsing
instead and not change it.

This fix must be backported to 1.8, and it requires that the following
patches are also merged :
 - MINOR: http: adjust the list of supposedly cacheable methods
 - MINOR: http: update the list of cacheable status codes as per RFC7231
 - MINOR: http: start to compute the transaction's cacheability from the request
 - BUG/MINOR: http: do not ignore cache-control: public

src/cache.c

index cdfd43d570ff069cfacebd6c8d3ec34ba19e61e2..459c2e8bf5acd27c2951ec7f83eb1b9dd947503c 100644 (file)
@@ -431,11 +431,7 @@ enum act_return http_action_store_cache(struct act_rule *rule, struct proxy *px,
        if (http_find_header2("Vary", 4, txn->rsp.chn->buf->p, &txn->hdr_idx, &ctx))
                goto out;
 
-       /* we need to put this flag before using check_response_for_cacheability */
-       txn->flags |= TX_CACHEABLE;
-
-       if (txn->status != 101)
-               check_response_for_cacheability(s, &s->res);
+       check_response_for_cacheability(s, &s->res);
 
        if (!(txn->flags & TX_CACHEABLE))
                goto out;