Ответ 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);

Спасибо

 4
Author: Rainer Feike, 2016-07-21

3 answers

Вероятно, это кэш страниц для анонимных пользователей, который работает независимо от динамического кэша.

Вы можете отключить его с помощью этой команды:

\Drupal::service('page_cache_kill_switch')->trigger();

Вы можете активировать это в любом месте своего кода, и это будет справедливо для любого ответа, который вы отправите на запрос. Так что это также должно сработать для ответа REST.

 4
Author: 4k4, 2016-07-21 09:55:39

У меня есть сообщение на ресурсе (для анонимов). Приведенные выше ответы мне не помогли.

Было сделано следующее:

$response = new ModifiedResourceResponse($result);
return $response;

Подробнее читайте в Измененный ресурс ответа()

 4
Author: Adi, 2017-03-16 12:38:13

Попробуйте добавить "addcacheabledependency" в "Resourceresponse"

$response = new ResourceResponse($result);
$response->addCacheableDependency($result);
return $response;

Создайте ресурс Rest для метода GET в Drupal 8

 0
Author: Ruby232, 2017-12-12 21:52:39