Является ли метод HTTP PURGE идемпотентным в Varnish?

Является ли HTTP-глагол PURGE идемпотентным? Если я отправлю один и тот же запрос PURGE дважды, получу ли я 200 раз?

У меня есть микросервис, который делает недействительным кэш Varnish перед публикацией сообщения в очередь кроликов. В случае сбоя продувки нам нужно просто войти и продолжить выполнение.

Потребитель очереди должен получить последний статус ресурса из кэша Varnish. Будет ли новый запрос на очистку (до фактического запроса ресурса от лака) от второго микросервиса возвращать успех в случае успешного завершения первой очистки от первого микросервиса?

2 ответа

Решение

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).

Когда вы вызываете PURGE для ресурса (URL), он будет удален из кэша (Varnish), поэтому для следующего GET-запроса к тому же ресурсу Varnish будет вызывать бэкэнд и кэшировать его ответ. Если вы снова вызовете PURGE для этого ресурса, он снова будет удален из кэша.

Да, несколько запросов PURGE возвращают 200.

Другие вопросы по тегам