Отключение кэша страниц для ответа на перенаправление
Я реализовал условное перенаправление на своем сайте через подписчика события и вернул ответ на перенаправление. Это работает, но, я полагаю, из-за того, что модуль page_cache
кэшируется для анонимных пользователей.
В основном это то, что я использую для настройки ответа на перенаправление:
public function checkRedirectStatus(GetResponseEvent $event) {
if(shouldIRedirect()) {
$response = new RedirectResponse('/redirect/path');
$event->setResponse($response);
}
}
Приведенное выше кэшируется независимо от того, возвращает ли оно значение true, если я не добавлю \Drupal::service('page_cache_kill_switch')->trigger();
.
Поскольку это страница с довольно высоким трафиком, я обеспокоен обходом кэша для анонимных пользователи. Есть ли другие варианты, о которых я не знаю?
Если это относится к событию ядра REQUEST
, насколько далеко идущее page_cache_kill_switch
?
Спасибо за вашу помощь!
1 answers
Это не совсем ответ на ваш вопрос, но я чувствую, что это важная информация. Я сделал нечто подобное, но мне также не понравилось использовать переключатель "убить". В другой итерации я использовал trustedredirectresponse, который позволил мне по-другому решить проблему с кэшем. Это хорошо сработало для меня. Я понимаю, что это заставляет браузеры всегда обходить кэш при выполнении перенаправления, но само перенаправление кэшируется в drupal до тех пор, пока кэш $entity (моя зависимость от кэша) не будет признан недействительным.
$response_headers = [
'Cache-Control' => 'no-cache, no-store, must-revalidate',
];
$response = new TrustedRedirectResponse($url, '302', $response_headers);
// In my case $entity is a content entity where my redirect $url is generated.
// In your case you'd add cache dependencies relevant to determining shouldIRedirect().
$response->addCacheableDependency($entity);
$event->setResponse($response);