Ответ REST кэшируется для запросов гостевых пользователей
Я реализовал своего рода счетчик посещений страницы в качестве запроса REST. Страница статьи отображает JS на странице, которая позже выполняет jQuery.getJSON для ресурса REST.
Пока это работает нормально. Страница доставляется из кэша (X-Drupal-Cache: "ПОПАДАНИЕ"), и браузер выполняет дополнительный запрос к ресурсу REST (/api/v1/check/l/1?_format=json).
К сожалению, обработчик REST не вызывается для представлений гостевых пользователей. Вместо этого Drupal выдает кэшированный ответ. Это работает только для аутентифицированных пользователей.
Для гостя я получаю
Cache-Control:"must-revalidate, no-cache, private"
X-Drupal-Dynamic-Cache:"UNCACHEABLE"
НО:
X-Drupal-Cache:"HIT"
И обработчик REST не выполняется. Мой ответ на ОТДЫХ
return (new ResourceResponse($rc))->addCacheableDependency(null);
Спасибо
3 answers
Вероятно, это кэш страниц для анонимных пользователей, который работает независимо от динамического кэша.
Вы можете отключить его с помощью этой команды:
\Drupal::service('page_cache_kill_switch')->trigger();
Вы можете активировать это в любом месте своего кода, и это будет справедливо для любого ответа, который вы отправите на запрос. Так что это также должно сработать для ответа REST.
У меня есть сообщение на ресурсе (для анонимов). Приведенные выше ответы мне не помогли.
Было сделано следующее:
$response = new ModifiedResourceResponse($result);
return $response;
Подробнее читайте в Измененный ресурс ответа()
Попробуйте добавить "addcacheabledependency" в "Resourceresponse"
$response = new ResourceResponse($result);
$response->addCacheableDependency($result);
return $response;