From: Willy Tarreau Date: Tue, 1 Oct 2019 15:59:17 +0000 (+0200) Subject: Revert "MINOR: cache: allow caching of OPTIONS request" X-Git-Tag: v2.1-dev2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6905d18495b963324356c52c1020e77f4d4e8f3f;p=thirdparty%2Fhaproxy.git Revert "MINOR: cache: allow caching of OPTIONS request" This reverts commit 1263540fe824c74bc3c668fec3476b880d65b27c. As discussed in issues #214 and #251, this is not the correct way to cache CORS responses, since it relies on hacking the cache to cache the OPTIONS method which is explicitly non-cacheable and for which we cannot rely on any standard caching semantics (cache headers etc are not expected there). Let's roll this back for now and keep that for a more reliable and flexible CORS-specific solution later. --- diff --git a/src/cache.c b/src/cache.c index 414b931678..06924cc6f8 100644 --- a/src/cache.c +++ b/src/cache.c @@ -563,8 +563,8 @@ enum act_return http_action_store_cache(struct act_rule *rule, struct proxy *px, if (!(txn->req.flags & HTTP_MSGF_VER_11)) goto out; - /* cache only GET or OPTIONS method */ - if (txn->meth != HTTP_METH_GET && txn->meth != HTTP_METH_OPTIONS) + /* cache only GET method */ + if (txn->meth != HTTP_METH_GET) goto out; /* cache key was not computed */ @@ -1069,9 +1069,6 @@ int sha1_hosturi(struct stream *s) ctx.blk = NULL; switch (txn->meth) { - case HTTP_METH_OPTIONS: - chunk_memcat(trash, "OPTIONS", 7); - break; case HTTP_METH_HEAD: case HTTP_METH_GET: chunk_memcat(trash, "GET", 3); @@ -1107,10 +1104,10 @@ enum act_return http_action_req_cache_use(struct act_rule *rule, struct proxy *p struct cache_flt_conf *cconf = rule->arg.act.p[0]; struct cache *cache = cconf->c.cache; - /* Ignore cache for HTTP/1.0 requests and for requests other than GET, - * HEAD and OPTIONS */ + /* Ignore cache for HTTP/1.0 requests and for requests other than GET + * and HEAD */ if (!(txn->req.flags & HTTP_MSGF_VER_11) || - (txn->meth != HTTP_METH_GET && txn->meth != HTTP_METH_HEAD && txn->meth != HTTP_METH_OPTIONS)) + (txn->meth != HTTP_METH_GET && txn->meth != HTTP_METH_HEAD)) txn->flags |= TX_CACHE_IGNORE; http_check_request_for_cacheability(s, &s->req);