Cache-Control Конструктор

Cache-Control Конструктор

Опишите объект кэширования
 Под объектом понимается HTML-страница, файл изображения, таблицы стилей, JS-скрипта

Содержимое носит одноразовый характер. Каждая новая загрузка объекта генерирует его новую версию, вариант. При этом предыдущая версия становится уже неактуальной и более никого интересовать не должна.

В объекте есть обращение к конкретному пользователю, указано его личное имя, аккаунт или другая персональная информация, которая не предназначена широкому кругу пользователей. Или объект содержит информацию, которая предназначена, важна и интересна только конкретному пользователю.

Объект после изменения содержимого всегда получает новое имя или новый уникальный параметр.
Кэшируемость
Рекомендуется для страниц, связанных с моментально устаревающим контентом, например, курсами акций, или конфиденциальной информацией – реквизитами банковских карт, персональными данными, приватными беседами или личными фотографиями. Директива запрещает любое сохранение данных и применяется ко всем без исключения публичным и приватным кэшам по всей цепочке передачи данных.

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

Рекомендуется для часто используемых документов, предназначенных для неограниченного круга лиц – публичных страниц, общедоступных изображений, таблиц стилей и скриптов.
Срок годности данных
Кэш самостоятельно на основе внутренних эвристических алгоритмов определит оптимальный срок годности данных.

Можно самостоятельно определить, какой период времени данные в кэше будут считаться валидными.
Ручное управление сроком годности
Для данных, которые никогда не устареют. Например, фотография какого-либо события, которую не планируется в дальнейшем редактировать.

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

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

В течение этого времени данные будут браться из кэша. По истечении этого срока кэш может как удалить данные, так и продолжить хранить их на своё усмотрение, но должен будет попробовать обновить данные, обратившись к вышестоящему или исходному серверу. Настройка будет применена сразу ко всем кэширующим устройствам, которые получат право сохранять данные.
Срок годности данных в публичных кэшах
Срок годности данных в публичных кэшах будет совпадать с общими настройками срока годности max-age.

Можно самостоятельно определить, какой период времени данные в публичных кэшах будут считаться валидными.
Ручное управление сроком годности
Для общедоступных данных, которые никогда не устареют. Например, графические элементы дизайна страницы.

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

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

В течение этого времени данные будут браться из кэша. По истечении этого срока кэш может как удалить данные, так и продолжить хранить их на своё усмотрение, но должен будет попробовать обновить данные, обратившись к вышестоящему кэшу или исходному серверу.
Запрос на обновление данных
Кэш самостоятельно определит порядок запроса на обновление данных.

Можно самостоятельно определить, по какому алгоритму будет происходить порядок контроля и обновления данных в кэше.
Ручное управление порядком ревалидации
Запрашивать актуальность данных у исходного сервера при каждом обращении к кэшу. Кэш будет присылать запрос If-Modified-Since и ждать ответ 304 или 200 не зависимо от того, просрочены данные в кэше или нет. Это повышает нагрузку на сервер, но гарантирует постояную актуальность отображаемых данных. Фактически игнорирует директиву max-age.

Запрос актуальности данных в кэшах всех типов будет происходить только после истечения срока годности данных в кэше. Есть шанс, что взятые из кэша данные уже были изменены на исходном сервере.

Публичные кэширующие сервера будут пытаться обновить актуальность данных только после истечения их срока годности. Шанс, что взятые из таких кэшей данные уже устарели, сохраняется.

Кэш не будет беспокоить исходный сервер запросами. Все данные, помещённые в кэш, считаются неизменяемыми и актуальными до истечения срока жизни. Подходит для статических неизменяемых файлов, версионированных таблиц стилей и скриптов. Из соображений безопасности эта директива должна работать только с защищённым протоколом HTTPS. Вероятно, часть устаревших кэшей не поддерживает эту директиву. RFC 8246
Прочие директивы
В зависимости от настроек кэш может принимать нежелательное решение о дополнительном сжатии данных либо изменении их формата. Например, для экономии дискового пространства несжатые текстовые материалы могут быть подвергнуты архивации, а у изображений может быть изменён формат на более эффективный или сжатый с потерей качества. Такое поведение кэша встречается крайне редко и является критическим только для изображений.

PHP

Для скриптов, написанных на языке PHP, необходимо добавить строку с кодом в начало скрипта, до точки вывода основного контента.
header("Cache-Control: ");

Nginx

Для веб-сервера Nginx необходимо добавить строку с командой в файл конфигурации *.conf соответствующей секции server или location.
add_header Cache-Control "";

Apache

Для веб-сервера Apache необходимо добавить строку с командой в файл основной конфигурации httpd.conf или соответствующий файл .htaccess.
Header set Cache-Control ""