Вебсправочник
Основы веб-разработки

stale-while-revalidate: устаревший ответ во время обновления

Директива stale-while-revalidate разрешает некоторое время отдавать устаревший кешированный ответ, пока выполняется его обновление. Это компромисс между скоростью и свежестью, который подходит не всем данным.

Назначение

Директива stale-while-revalidate разрешает некоторое время отдавать устаревший кешированный ответ, пока выполняется его обновление. Это компромисс между скоростью и свежестью, который подходит не всем данным.

Как это работает

Max-age задаёт период свежести, а stale-while-revalidate — дополнительное окно использования устаревшей копии при обновлении. Поддержка и фактическое поведение зависят от кеша. Пример предназначен для публичного учебного ресурса.

Пример

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: public, max-age=60, stale-while-revalidate=30
ETag: "lesson-list-v2"

{"lessons":12}

Что должно получиться

Ответ считается свежим в пределах 60 секунд по правилам возраста HTTP-кеша. Затем подходящий кеш может ещё до 30 секунд использовать старую копию при обновлении. Это не обещание фонового запроса строго на шестидесятой секунде.

Граница применения и частая ошибка

Не применяйте public к персональным ответам без анализа всей схемы кеширования. Для данных, где недопустимо устаревшее состояние, выбирайте другие правила. Stale-while-revalidate не равно stale-if-error и не разрешает бесконечно показывать старый результат.

Самостоятельная проверка

На своём тестовом ресурсе сравните Date, Age и Cache-Control при нескольких запросах. Измените содержимое на сервере и проверьте допустимое время показа старой версии. Не переносите учебные секунды в рабочую конфигурацию без требований к свежести.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.