]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: cache: add method to cache hash
authorBaptiste Assmann <bedis9@gmail.com>
Mon, 5 Aug 2019 14:55:32 +0000 (16:55 +0200)
committerWilliam Lallemand <wlallemand@haproxy.org>
Wed, 7 Aug 2019 13:13:38 +0000 (15:13 +0200)
Current HTTP cache hash contains only the Host header and the url path.
That said, request method should also be added to the mix to support
caching other request methods on the same URL. IE GET and OPTIONS.

src/cache.c

index 9cef0cab6405a6971da3b67bc4d0ac93add1c3a3..5b4062384a2c964638377cc17396bda888f4686b 100644 (file)
@@ -1041,9 +1041,9 @@ enum act_parse_ret parse_cache_store(const char **args, int *orig_arg, struct pr
        return ACT_RET_PRS_OK;
 }
 
-/* This produces a sha1 hash of the concatenation of the first
- * occurrence of the Host header followed by the path component if it
- * begins with a slash ('/'). */
+/* This produces a sha1 hash of the concatenation of the HTTP method,
+ * the first occurrence of the Host header followed by the path component
+ * if it begins with a slash ('/'). */
 int sha1_hosturi(struct stream *s)
 {
        struct http_txn *txn = s->txn;
@@ -1056,6 +1056,16 @@ int sha1_hosturi(struct stream *s)
 
        trash = get_trash_chunk();
        ctx.blk = NULL;
+
+       switch (txn->meth) {
+       case HTTP_METH_HEAD:
+       case HTTP_METH_GET:
+               chunk_memcat(trash, "GET", 3);
+               break;
+       default:
+               return 0;
+       }
+
        if (!http_find_header(htx, ist("Host"), &ctx, 0))
                return 0;
        chunk_memcat(trash, ctx.value.ptr, ctx.value.len);