Игнорирование заголовка Vary для ботов
Varnish поддерживает HTTP-варианты из коробки, но заголовок Vary несколько ограничен, так как он работает с полными значениями заголовков. Если вы хотите, например, провести кампанию A/B-тестирования или выполнить развертывание синего/зелёного, вы можете заставить клиентов «запомнить» свой путь с помощью cookie первого уровня.
Однако, когда бот поисковой системы запрашивает содержимое, есть большая вероятность, что он не обрабатывает cookie, и, скорее всего, вы предпочтёте быстро предоставить ответ. В этом случае, вероятно, вы не захотите даже пытаться присвоить клиенту категорию, но в таком случае создаёте новый вариант в кэше, который не относится ни к A, ни к B, ни к синему, ни к зелёному, ни к чему-либо ещё, что предоставляет ваш бэкенд.
Если способ предоставления содержимого не имеет значения для бота, потому что вы изменили цвет кнопки или что-то ещё, ортогональное самому содержимому, то вы рискуете промахом кэша с вредными последствиями добавления ненужного варианта в кэш и его предоставления с дополнительной задержкой.
Если задержка имеет первостепенное значение, вы можете использовать req.hash_ignore_vary для отказа от соответствия Vary во время поиска и получения самого свежего варианта.
Игнорируя способ установки cookie и предполагая, что бэкенд всегда предоставляет точный заголовок Cache-Control, даже когда cookie присутствуют, ниже приведён пример настройки A/B-тестирования, где ботам предоставляется самый свежий вариант:
import cookie;
include "devicedetect.vcl";
sub vcl_recv {
call devicedetect;
if (req.http.X-UA-Device ~ "bot") {
set req.hash_ignore_vary = true;
}
}
sub vcl_req_cookie {
cookie.parse(req.http.Cookie);
set req.http.X-AB-Test = cookie.get("ab-test");
return;
}
sub vcl_deliver {
unset resp.http.Vary;
}
Также предполагается, что бэкенд отвечает с заголовком Vary: X-AB-Test и не изменяет другие заголовки.
Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/vcl-design-patterns/req-hash_ignore_vary.html