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 при нескольких запросах. Измените содержимое на сервере и проверьте допустимое время показа старой версии. Не переносите учебные секунды в рабочую конфигурацию без требований к свежести.