Varnish 中的 HTTP 方法 PURGE 是幂等的吗?

Is the HTTP method PURGE idempotent in Varnish?

HTTP 动词 PURGE 是幂等的吗? 如果我两次发送相同的 PURGE 请求,我第二次会收到 200 吗?

我有一个微服务,它在将消息发布到兔子队列之前使 Varnish 缓存失效。如果清除失败,我们只需要记录并继续执行。

队列消费者必须从 Varnish 缓存中获取资源的最新状态。 如果第一个微服务的第一次清除成功,第二个微服务的新清除请求(在实际从清漆请求资源之前)是否会成功return?

PURGE 不是标准的 HTTP 方法。它只是在 Varnish VCL 中配置的东西——通常以这种方式或类似方式:

if (req.method == "PURGE") {
        if (!client.ip ~ purge) {
                return(synth(405,"Not allowed."));
        }
        return (purge);
}

(参见:https://www.varnish-cache.org/docs/trunk/users-guide/purging.html

当您对资源 (URL) 调用 PURGE 时,它将从缓存 (Varnish) 中删除,因此对于同一资源的下一个 GET 请求,Varnish 将调用后端并缓存其响应。如果您随后对该资源再次调用 PURGE,它将再次从缓存中逐出。

年,多次 PURGE 请求 return 200.