ћерион Ќетворкс

5 минут

”правление кэш-пам€тью определ€ет поведение кэшировани€ дл€ веб-сайта, дава€ браузерам пон€ть, как часто следует обновл€ть локально хран€щиес€ ресурсы.


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

Cache-control Ц это HTTP-заголовок, который определ€ет поведение браузера при кэшировании. ѕроще говор€, когда кто-то посещает веб-сайт, то его браузер сохран€ет определенные ресурсы, такие как изображени€ и данные веб-сайта, в хранилище, которое называетс€ кэш.  огда пользователь вновь посещает этот веб-сайт, то cache-control диктует правила, которые определ€ют, будут ли эти ресурсы загружены из локального кэша данного пользовател€, или браузер должен отправить запрос на сервер дл€ получени€ новых ресурсов. ƒл€ более глубокого понимани€, что такое cache-control необходимо базовое понимание того, что такое кэширование в браузере и что такое HTTP-заголовки.


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

 ак уже было описано выше, кэширование в браузере Ц это когда веб-браузер сохран€ет ресурсы веб-сайта, чтобы не запрашивать их вновь с сервера. Ќапример, фоновое изображение веб-сайта может быть сохранено локально в кэше, чтобы при повторном посещении пользователем данного веб-сайта изображение загружалось из локальных файлов пользовател€, и тем самым страница загружалась бы быстрее.

Ѕраузеры хран€т эти ресурсы в течение определенного периода времени, известного как врем€ жизни информации (TTL - Time To Live). ≈сли пользователь запросит кэшированный ресурс после истечени€ TTL, то браузеру придетс€ снова обратитьс€ к серверу, чтобы загрузить новую копию ресурса.  ак браузеры и веб-серверы узнают TTL дл€ каждого ресурса? ¬от здесь в игру вступают HTTP-заголовки.


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

ѕротокол передачи гипертекста (HTTP - Hypertext Transfer Protocol) представл€ет собой синтаксис дл€ обмена данными во ¬семирной паутине, и этот обмен данными состоит из запросов от клиентов к серверам и ответов от серверов к клиентам.  аждый из HTTP-запросов и ответов содержит р€д пар Ђключ-значениеї, которые называют заголовками.

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

  1. »нформацию о том, какой ресурс запрашиваетс€
  2. »нформацию о том, какой браузер использует клиент
  3. »нформацию о том, какие форматы данных примет клиент

«аголовки ответов обычно содержат информацию о:

  1. ”спешности выполнени€ запроса
  2. языке и формате любых ресурсов в теле ответа

«аголовок cache-control может использоватьс€ как в HTTP-запросах, так и в HTTP-ответах.


„то находитс€ внутри заголовка cache-control?

«аголовки состо€т из пар Ђключ-значениеї, разделенных двоеточием. ƒл€ cache-control Ђключї, или часть слева от двоеточи€, - это всегда Ђcache-controlї. Ђ«начениеї - это то, что находитс€ справа от двоеточи€. «начений дл€ cache-control может быть несколько, или оно может быть одно. ≈сли их несколько, то они раздел€ютс€ зап€тыми.

cache-control

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

ƒавайте рассмотрим несколько наиболее распространенных директив cache-control:

cache-control: private

ќтвет с директивой private может быть кэширован только клиентом, но никак не посредником, таким как CDN или прокси-сервером. „асто сюда относ€тс€ ресурсы, которые содержат личные данные, например, веб-сайт, отображающий личную информацию пользовател€.

cache-control: public

«десь наоборот, директива public говорит о том, что ресурс может хранитс€ в любом кэше.

cache-control: no-store

ќтвет с директивой no-store нельз€ кэшировать нигде и никогда. Ёто означает, что при каждом запросе пользователем этих данных, требуетс€ отправить запрос на исходный сервер дл€ их получени€. Ёта директива, как правило, используетс€ дл€ ресурсов, содержащих конфиденциальные данные, например, информацию о банковском счете.

cache-control: no-cache

Ёта директива означает, что кэшированные версии запрошенного ресурса нельз€ использовать без предварительной проверки наличи€ обновленной версии. ќбычно это делаетс€ с помощью ETag.

ETag Ц это еще один HTTP-заголовок, который содержит маркер, уникальный дл€ версии ресурса на момент его запроса. Ётот маркер мен€етс€ на исходном сервере при каждом обновлении ресурса.

 огда пользователь возвращаетс€ на страницу с ресурсом под директивой no-cache, клиенту всегда придетс€ подключатьс€ к исходному серверу и сравнивать ETag на кэшированном ресурсе с ETag на сервере. ≈сли они совпадают, то кэшированный ресурс предоставл€етс€ пользователю. ¬ противном случае, это означает, что ресурс был обновлен, и клиенту необходимо загрузить обновленную версию, чтобы иметь возможность предоставить его пользователю. Ётот процесс гарантирует, что пользователь всегда будет получать самую последнюю версию ресурса без ненужных посто€нных загрузок.

cache-control: max-age

Ёта директива определ€ет врем€ жизни информации, или, иными словами, сколько секунд ресурс может находитьс€ в кэше после его загрузки. Ќапример, если max-age установлен на 1800, то это значит, что в течение 1800 секунд (30 минут) после того, как ресурс был впервые запрошен с сервера, пользователю будет предоставл€тьс€ кэшированна€ верси€ этого ресурса при последующих запросах. ≈сли пользователь запросит этот ресурс снова по истечении этих 30 минут, то клиенту необходимо будет запросить новую копию с исходного сервера.

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


ѕочему cache-control так важен?

 эширование в браузере Ц это отличный способ сохранить ресурсы и, тем самым, улучшить процесс взаимодействи€ с пользователем в »нтернете, но без cache-control этот процесс не был бы столь надежным. ¬се ресурсы на всех сайтах будут использовать одни и те же правила кэшировани€, а это значит, что конфиденциальна€ информаци€ будет кэшироватьс€ также, как и общедоступна€ информаци€, а ресурсы, которые часто обновл€ютс€, будут кэшироватьс€ на то же врем€, что и ресурсы, которые редко обновл€ютс€.

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


—кидки 50% в Merion Academy

¬ыбрать курс