Для ответа с изображением, проходящего через видимый для HTTP общий кеш, опубликуйте явный срок и валидатор. Когда изображение безопасно использовать повторно между пользователями, примеры заголовков ответа таковы:

Cache-Control: public, max-age=604800
ETag: "image-v4"

Срок указывается в секундах; 604800 — это одна неделя. Используйте public только для содержимого, предназначенного для повторного использования между пользователями.

Если браузеру и общему прокси нужны разные сроки, s-maxage задаёт срок общего кеша. Например, max-age=3600 вместе с s-maxage=604800 даёт общему кешу более длительный период свежести.

Expires — это дата, а не длительность

Expires принимает отметку времени в формате даты HTTP. max-age перекрывает это поле, а для общих кешей приоритет имеет s-maxage. Создавайте любую дату Expires при формировании ответа.

Перезагрузка может запросить валидацию

Запрос, содержащий Cache-Control: no-cache, требует успешной валидации на источнике, прежде чем сохранённый ответ будет использован повторно. Это может происходить даже тогда, когда обычная политика свежести ответа иначе допускала бы повторное использование.

Валидатор позволяет кешу эффективно проверять неизменённое изображение. Ответ 304 может подтвердить сохранённое представление, не передавая байты изображения с источника повторно. Поэтому трафик к источнику сам по себе не означает, что кешированный объект был отброшен.

Сравнивайте обычное повторное использование и явные перезагрузки при пересмотре политики.

Похожие статьи