Что такое cache control?

Что такое cache-control?

Кэш-контроль – это заголовок HTTP, который диктует кэширование в браузере. В двух словах, когда кто-то посещает веб-сайт, их браузер будет сохранять определенные ресурсы, такие как изображения и данные веб-сайтов, в хранилище, называемом — кэш. Когда этот пользователь повторно посещает тот же веб-сайт, cache-control устанавливает правила, которые определяют, будут ли у этого пользователя загружены эти ресурсы из их локального кэша, или браузер должен будет отправить запрос на сервер для свежих ресурсов. Для понимания управления кэшем в большей глубине требуется базовое понимание кэширования браузера и заголовков HTTP.

Что такое кэширование браузера

Как объяснялось выше, кэширование браузера – это когда веб-браузер сохраняет ресурсы сайта, поэтому ему не нужно снова получать их с сервера. Например, фоновое изображение на веб-сайте может быть сохранено локально в кэше, чтобы при повторном посещении этой страницы изображение загружалось из локальных файлов пользователя, а страница загружалась намного быстрее.
Браузеры будут хранить эти ресурсы только в течение определенного периода времени, известного как время жизни (TTL). Если пользователь запрашивает кэшированный ресурс после истечения срока жизни, браузеру придется снова обратиться к серверу и загрузить новую копию ресурса. Как браузеры и веб-серверы знают TTL для каждого ресурса? Здесь HTTP заголовки вступают в игру.

Что такое заголовки HTTP?

Что такое заголовки HTTP?

Протокол передачи гипертекста (HTTP) описывает синтаксис для связи во всемирной паутине, и эта связь состоит из запросов от клиентов к серверам и ответов от серверов обратно к клиентам. Эти HTTP-запросы и ответы помечаются рядом пар ключ-значение, называемых заголовками.

Эти заголовки содержат много важной информации о каждом сообщении. Например, заголовок запроса обычно содержит:

1. Информация о запрашиваемом ресурсе.
2. Какой браузер использует клиент.
3. Какие форматы данных примет клиент.
Заголовки ответов часто содержат информацию о:
1. Был ли запрос успешно выполнен.
2. Язык и формат любых ресурсов в теле ответа.
Заголовок кэш-контроль может отображаться как в HTTP-запросах, так и в ответах.

Что находится в заголовке кэш-контроля

Заголовки состоят из пар ключ-значение, разделенные двоеточием. Ключ, или часть слева от двоеточия, всегда «cache-control». «Значение» — это то, что находится справа от двоеточия, и для управления кэшем может быть одно или несколько значений, разделенных запятыми.
Эти значения называются директивами, и они определяют, кто может кэшировать ресурс, а также, как долго эти ресурсы могут кэшироваться до их обновления. Ниже рассмотрятся некоторые из наиболее распространенных директив управления кэшем:

• cache-control: private
Ответ с директивой «private» может кэшироваться только клиентом и никогда агентом-посредником, таким как CDN или прокси. Часто это ресурсы, содержащие личные данные, такие как веб-сайт, отображающий личную информацию пользователя.

• cache-control: public
И наоборот, директива «public» означает, что ресурс может храниться в любом кэше.

• cache-control: no-store
Ответ с директивой «no-store» не может быть кэширован нигде и никогда. Это означает, что каждый раз, когда пользователь запрашивает эти данные, запрос должен быть отправлен на исходный сервер для получения новой копии. Эта директива обычно зарезервирована для ресурсов, содержащих чрезвычайно конфиденциальные данные, такие как сведения о банковских счетах.

• cache-control: no-cache
Эта директива означает, что кэшированные версии запрошенного ресурса нельзя использовать без предварительной проверки наличия обновленной версии. Обычно это делается с помощью ETag.

ETag — это еще один заголовок HTTP, содержащий маркер, уникальный для версии ресурса на момент запроса. Этот маркер изменяется на исходном сервере при каждом обновлении ресурса.
Когда пользователь возвращается на страницу с ресурсом без кэша, клиент всегда должен подключиться к исходному серверу и сравнить ETag кэшированного ресурса с ETag на сервере. Если Etag идентичны, кэшированный ресурс будет предоставлен пользователю. В противном случае это означает, что ресурс был обновлен, и клиент должен будет загрузить новую версию. Этот процесс гарантирует, что пользователь всегда получает самую последнюю версию этого ресурса, не требуя ненужных загрузок.

• cache-control: max-age
Эта директива определяет время жизни, другими словами, сколько секунд ресурс может быть подан из кэша после его загрузки. Например, если максимальный возраст установлен в 1800, это означает, что в течение 1800 секунд (30 минут) после первого запроса ресурса с сервера, пользователю будет предоставляться кэшированная версия этого ресурса при последующих запросах. По истечении 30 минут, клиент должен будет запросить новую копию с исходного сервера.

Директива «s-maxage» предназначена специально для общих кэшей, таких как CDN, и определяет, как долго эти общие кэши могут продолжать обслуживать ресурс из кэша. Эта директива переопределяет директиву «max-age» для отдельных клиентов.

Почему управление кэшем имеет значение

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

Cache-control добавляет гибкость, которая делает кэширование браузера действительно полезным, позволяя разработчикам диктовать, как каждый ресурс будет кэшироваться. Это также позволяет разработчикам устанавливать специальные правила для посредников, что является фактором, почему сайты, использующие CDN, как правило, работают лучше, чем сайты, которые этого не делают.

На видео: Кеширование в HTTP

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: