【问题标题】:Is the HTTP method PURGE idempotent in Varnish?Varnish 中的 HTTP 方法 PURGE 是幂等的吗?
【发布时间】:2016-06-08 12:58:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: rabbitmq varnish microservices http-method purge


    【解决方案1】:

    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,它将再次从缓存中逐出。

    【讨论】:

    • 好吧,但我会发送两次清除而不同时请求资源。我会收到两次 200 吗?
    • @GaSacchi:为什么不试试看实际发生了什么?
    • 因为当我发布问题时,我无权访问该环境。正如您从我上面的评论和我的回答中看到的那样,我稍后确实尝试过.. :)
    【解决方案2】:

    是的,多个 PURGE 请求返回 200。

    【讨论】:

    • 想知道那是什么错误 200 Purged 不过..(它也在第一个清除请求中返回)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2015-05-25
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多