Ответ
HTTP-ответ может быть кэширован, если он соответствует нескольким ключевым критериям, в основном связанным с методом запроса и заголовками ответа.
Основные условия для кэширования:
-
Метод запроса: Кэшируются в первую очередь безопасные и идемпотентные методы, такие как:
GET: Основной кандидат на кэширование, так как он предназначен для получения данных.HEAD: АналогиченGET, но без тела ответа.- Методы
POST,PUT,DELETE, изменяющие состояние на сервере, по умолчанию не кэшируются.
-
Код состояния ответа: Кэшируются успешные ответы или редиректы.
200 OK203 Non-Authoritative Information301 Moved Permanently404 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: Ответы на запросы с этим заголовком обычно не кэшируются промежуточными прокси-серверами из соображений безопасности.