При каких условиях HTTP-ответ может быть кэширован

Ответ

HTTP-ответ может быть кэширован, если он соответствует нескольким ключевым критериям, в основном связанным с методом запроса и заголовками ответа.

Основные условия для кэширования:

  1. Метод запроса: Кэшируются в первую очередь безопасные и идемпотентные методы, такие как:

    • GET: Основной кандидат на кэширование, так как он предназначен для получения данных.
    • HEAD: Аналогичен GET, но без тела ответа.
    • Методы POST, PUT, DELETE, изменяющие состояние на сервере, по умолчанию не кэшируются.
  2. Код состояния ответа: Кэшируются успешные ответы или редиректы.

    • 200 OK
    • 203 Non-Authoritative Information
    • 301 Moved Permanently
    • 404 Not Found (может кэшироваться, чтобы не запрашивать несуществующий ресурс повторно).
  3. Заголовки управления кэшем в ответе: Сервер должен явно разрешить кэширование с помощью специальных заголовков.

    • Cache-Control: Современный и наиболее гибкий заголовок (например, max-age=3600, public, private).
    • Expires: Устаревший заголовок, указывающий точную дату и время, когда кэш станет невалидным.

Пример кэшируемого ответа сервера:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: public, max-age=86400
ETag: "abcdef123456"

{
  "data": "some cached content"
}

Что может помешать кэшированию?

  • Cache-Control: no-store: Явный запрет на любое кэширование.
  • Cache-Control: no-cache: Требует валидации с сервером перед использованием кэшированной версии.
  • Заголовок Authorization: Ответы на запросы с этим заголовком обычно не кэшируются промежуточными прокси-серверами из соображений безопасности.