Ответ
HTTP-ответ может быть кэширован, если он соответствует нескольким ключевым критериям, в основном связанным с методом запроса и заголовками ответа.
Основные условия для кэширования:
-
Метод запроса: Кэшируются в первую очередь безопасные и идемпотентные методы, такие как:
GET
: Основной кандидат на кэширование, так как он предназначен для получения данных.HEAD
: АналогиченGET
, но без тела ответа.- Методы
POST
,PUT
,DELETE
, изменяющие состояние на сервере, по умолчанию не кэшируются.
-
Код состояния ответа: Кэшируются успешные ответы или редиректы.
200 OK
203 Non-Authoritative Information
301 Moved Permanently
404 Not Found
(может кэшироваться, чтобы не запрашивать несуществующий ресурс повторно).
-
Заголовки управления кэшем в ответе: Сервер должен явно разрешить кэширование с помощью специальных заголовков.
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
: Ответы на запросы с этим заголовком обычно не кэшируются промежуточными прокси-серверами из соображений безопасности.