Поделиться через


Cache-Control в кэшировании запросов REST

Для конечных точек REST можно повлиять на то, как построитель данных (DAB) использует внутренний кэш результатов запросов с заголовком Cache-Control запроса.

Это важно

Если кэширование отключено в конфигурации среды выполнения, эти директивы игнорируются и запросы выполняются нормально.

Поддерживаемые значения Cache-Control

Ценность Поведение
no-cache Позволяет DAB обойти кэши L1 и L2, получить свежие данные из базы данных и обновить кэши с новым результатом.
no-store Сообщает DAB не кэшировать ответ вообще (не хранится в L1 или L2 и не пытается получить из кэша).

Поведение

  • Сопоставление директив не учитывает регистр.
  • DAB не интерпретирует другие стандартные Cache-Control директивы, такие как max-age или max-stale.
  • Применяется только к операциям запросов REST. Не используется для директив кэша на уровне запросов GraphQL.
  • Значения заголовка HTTP запроса Cache-Control управляют кэшем L1 и L2.

Замечание

DAB не задает заголовки ответов управления кэшем для любой операции кэширования.

Директива: no-cache

Принудительно выполняет новые операции чтения и обновляет слои кэша.

Просьба

GET /api/Books
Cache-Control: no-cache
Accept: application/json

Ответ (пример)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

Эффект: кэш теперь содержит этот свежий результат (при условии настройки TTL).

Директива: no-store

При наличии используется существующее кэшированное значение; в противном случае запрашивает базу данных, но не заполняет (или не обновляет) кэш с новым результатом.

Просьба

GET /api/Books
Cache-Control: no-store
Accept: application/json

Ответ (пример)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

Эффект. Если этот результат еще не был кэширован, он не будет сохранен. Последующий only-if-cached запрос может завершиться ошибкой, если предыдущий запрос не заполнял кэш.

Отзыв

  • Используйте no-cache , когда необходимо принудительно обновить базу данных, а также обновить кэш.
  • Используйте no-store при желании данные, но не хотите, чтобы этот ответ изменил кэш (хотя он может прочитать существующее кэшированное значение).
  • Опустите заголовок для нормального поведения кэширования.