Кэшируемые ответы - это HTTP-ответы, которые могут быть закэшированы, то есть сохранены для дальнейшего восстановления и использования позже, тем самым снижая число запросов к серверу. Не все HTTP-ответы могут быть закэшированы. Вот несколько ограничений:
- Метод, используемый в запросе, кэшируемый, если это
GET
илиHEAD
. Ответ дляPOST
илиPATCH
запросов может также быть закэширован, если указан признак "свежести" данных и установлен заголовокContent-Location
, но это редко реализуется. (Например, Firefox не поддерживает это согласно https://bugzilla.mozilla.org/show_bug.cgi?id=109553.) Другие методы, такие какPUT
иDELETE
не кэшируемые, и результат их выполнения не кэшируется. - Коды ответа, известные системе кэширования, которые рассматриваются как кэшируемые:
200
,203
,204
,206
,300
,301
,404
,405
,410
,414
,501
. - Отсутствуют специальные заголовки в ответе, которые предотвращают кэширование: например,
Cache-Control
.
Обратите внимание, что некоторые некэшируемые запросы-ответы к определённым URI могут сделать недействительным (инвалидируют) предыдущие закэшированные ответы на тех же URI. Например, PUT
к странице pageX.html инвалидируют все закэшированные ответы GET
или HEAD
запросов к этой странице.
Когда и метод запроса и статус ответа кэшированы, то ответ к запросу тоже может быть закэширован:
GET /pageX.html HTTP/1.1 (…) 200 OK (…)
Запрос PUT
не может быть закэширован. Более того, он инвалидирует закэшированные данные запросов к тому же URI, сделанных через HEAD
или GET
:
PUT /pageX.html HTTP/1.1 (…) 200 OK (…)
Специальный заголовок Cache-Control
в ответе может предотвратить кэширование:
GET /pageX.html HTTP/1.1 (…) 200 OK Cache-Control: no-cache (…)
Материалы для изучения
Основные
- Определение кэшируемых методов в спецификации HTTP.