Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Общий заголовок Cache-Control используется для задания инструкций кэширования как для запросов, так и для ответов. Инструкции кэширования однонаправленные: заданная инструкция в запросе не подразумевает, что такая же инструкция будет указана в ответе

Header type General header
Forbidden header name нет
CORS-safelisted response-header да

Синтаксис

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

Инструкции кэширования для запросов

Стандартные инструкции Cache-Control, которые могут задаваться клиентом для HTTP запроса.

Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-Control: no-cache 
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: only-if-cached

Инструкции кэширования для ответов

Стандартные инструкции Cache-Control, которые могут задаваться сервером для HTTP ответа.

Cache-Control: must-revalidate
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: public
Cache-Control: private
Cache-Control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-Control: s-maxage=<seconds>

Расширенные инструкции Cache-Control

Расширенные инструкции Cache-Control не являются частью базовых стандартов, описывающих кэширование в HTTP. В таблице совместимости указаны браузеры, которые поддерживают расширенные инструкции.

Cache-Control: immutable 
Cache-Control: stale-while-revalidate=<seconds>
Cache-Control: stale-if-error=<seconds>

Инструкции

Управление кэшированием

public
Указывает, что ответ может быть закэширован в любом кэше.
private
Указывает, что ответ предназначен для одного пользователя и не должен помещаться в разделяемый кэш. Частный кэш может хранить ресурс.
no-cache
Указывает на необходимость отправить запрос на сервер для валидации ресурса перед использованием закешированных данных.
only-if-cached
Указывает на необходимость использования только закэшированных данных. Запрос на сервер не должен посылаться.

Управление временем жизни

max-age=<seconds>
Задает максимальное время в течение которого ресурс будет считаться актуальным. В отличие от Expires, данная инструкция является относительной по отношению ко времени запроса.
s-maxage=<seconds>
Переопределяет max-age или заголовок Expires, но применияется только для разделяемых кэшей (например, прокси) и игнорируется частными кэшами.
max-stale[=<seconds>]
Указывает, что клиент хочет пролучить ответ, для которого было превышено время устаревания. Дополнительно может быть указано значение в секундах, указывающее, что ответ не должен быть просрочен более чем на указанное значение.
min-fresh=<seconds>
Указывает, что клиент хочет получить ответ, который будет актуален как минимум указанное количество секунд.
stale-while-revalidate=<seconds>
Указывает, что клиент хочет получить просроченный ответ, одновременно осуществляя фоновую проверку наличия свежих данных. Значение в секундах обозначает, какое время клиент желает получать просроченный ответ.
stale-if-error=<seconds>
...

Управление ревалидацией и перезагрузкой

must-revalidate
Кэш должен проверить статус устаревших ресурсов перед их использованием. Просроченные ресурсы не должны быть использованы.
proxy-revalidate
То же самое, что must-revalidate, но применимо только к разделяемым кэшам (например, прокси) и игнорируется частными кэшами.
immutable
Indicates that the response body will not change over time. The resource, if unexpired, is unchanged on the server and therefore the client should not send a conditional revalidation for it (e.g. If-None-Match or If-Modified-Since) to check for updates, even when the user explicitly refreshes the page. Clients that aren't aware of this extension must ignore them as per the HTTP specification. In Firefox, immutable is only honored on https:// transactions. For more information, see also this blog post.

Другие инструкции

no-store
Кэш не должен хранить никакую информацию о запросе и ответе
no-transform
Никакие преобразования не должны применяться к ресурсу. Заголовки Content-Encoding, Content-Range, Content-Type не должны изменяться прокси. Непрозрачный прокси может, например, конвертировать изображения из одного формата в другой для сохранения дискового пространства или уменьшения трафика. Инструкция no-transform запрещает это.

Примеры

Выключение кэширования

Для выключения кэширования возможно добавить следующий заголовок к ответу. Дополнительно см. заголовки Expires и Pragma.

Cache-Control: no-cache, no-store, must-revalidate

Кэширование статического контента

Для файлов, которые не будут изменяться обычно возможно применить агрессивное кэширование, отослав ответ с заголовком ниже. Например, такой ответ может быть послан для изображений, файлов CSS и JavaScript. Дополнительно см. заголовок Expires.

Cache-Control: public, max-age=31536000

Спецификация

Specification Title
RFC 7234 Hypertext Transfer Protocol (HTTP/1.1): Caching
RFC 5861 HTTP Cache-Control Extensions for Stale Content
RFC 8246 HTTP Immutable Responses

Совместимость браузеров

Update compatibility data on GitHub
КомпьютерыМобильные
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidEdge MobileFirefox для AndroidOpera для AndroidiOS SafariSamsung Internet
Базовая поддержкаChrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка ДаIE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка ДаOpera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Да
immutable
Экспериментальная
Chrome Нет поддержки НетEdge Полная поддержка 15Firefox Полная поддержка 49IE Нет поддержки НетOpera Нет поддержки НетSafari Полная поддержка 11WebView Android Нет поддержки НетChrome Android Нет поддержки НетEdge Mobile Нет поддержки НетFirefox Android Нет поддержки НетOpera Android Нет поддержки НетSafari iOS Полная поддержка 11Samsung Internet Android Нет поддержки Нет
stale-while-revalidate
ЭкспериментальнаяНестандартная
Chrome Нет поддержки Нет
Замечания
Нет поддержки Нет
Замечания
Замечания See Chromium bug 348877.
Edge Нет поддержки НетFirefox Нет поддержки Нет
Замечания
Нет поддержки Нет
Замечания
Замечания See Bugzilla bug 995651.
IE Нет поддержки НетOpera Нет поддержки НетSafari Нет поддержки НетWebView Android Нет поддержки НетChrome Android Нет поддержки НетEdge Mobile Нет поддержки НетFirefox Android Нет поддержки НетOpera Android Нет поддержки НетSafari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нет
stale-if-error
ЭкспериментальнаяНестандартная
Chrome Нет поддержки Нет
Замечания
Нет поддержки Нет
Замечания
Замечания See Chromium bug 348877.
Edge Нет поддержки НетFirefox Нет поддержки Нет
Замечания
Нет поддержки Нет
Замечания
Замечания See Bugzilla bug 995651.
IE Нет поддержки НетOpera Нет поддержки НетSafari Нет поддержки НетWebView Android Нет поддержки НетChrome Android Нет поддержки НетEdge Mobile Нет поддержки НетFirefox Android Нет поддержки НетOpera Android Нет поддержки НетSafari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нет

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Нестандартная. Ожидается плохая кросс-браузерная поддержка.
Нестандартная. Ожидается плохая кросс-браузерная поддержка.
Смотрите замечания реализации.
Смотрите замечания реализации.

См. также

Метки документа и участники

Метки: 
Внесли вклад в эту страницу: akimy, lykosheff, Sergey.Terekhin
Обновлялась последний раз: akimy,