Кеширование в HTTP

Подробное описание опций кеширования, доступных через протокол HTTP.

Кэширование - это метод, который может помочь ускорить сетевые соединения, потому что чем меньше вещей нужно передавать, тем лучше.

Многие ресурсы могут быть очень большими и быть очень дорогими с точки зрения времени, а также фактических затрат (например, на мобильных устройствах) для извлечения.

Существуют различные стратегии кэширования, которые доступны через HTTP и используются браузерами.

Без кеширования

Во-первых,Cache-Controlзаголовок может указать браузеру никогда не использовать кэшированную версию ресурса без предварительной проверки значения ETag (подробнее об этом позже), используя параметрno-cacheценить:

Cache-Control: no-cache

Более строгийno-storeопция сообщает браузеру (и всем промежуточным сетевым устройствам) даже не хранить ресурс в своем кеше:

Cache-Control: no-store

ЕслиCache-Controlимеетmax-ageзначение, которое используется для определения количества секунд, в течение которых этот ресурс действителен в качестве кеша:

Cache-Control: max-age=3600

ВExpiresзаголовок

Когда отправляется HTTP-запрос, браузер проверяет, есть ли у него копия этой страницы в кеше, на основе требуемого URL-адреса.

Если есть, он проверяет страницу на наличиесвежесть.

Страница свежая, еслиHTTP-ответExpiresзаголовокзначение меньше текущей даты и времени.

Заголовок Expires принимает такую форму:

Expires: Sat, 01 Dec 2018 16:00:00 GMT

Условный GET

Есть разные способы выполнить условное получение. Все основаны на использованииIf-*заголовки запроса:

  • с помощьюIf-Modified-SinceиLast-Modified
  • с помощьюIf-None-MatchиETag

С помощьюIf-Modified-SinceиLast-Modified

Браузер может отправить запрос на сервер, и вместо того, чтобы просто запрашивать страницу, он добавляетIf-Modified-Sinceзаголовок, на основеLast-Modifiedзначение заголовка, полученное с текущей кэшированной страницы.

Это указывает серверу возвращать тело ответа (содержимое страницы) только в том случае, если ресурс был обновлен с этой даты.

В противном случае сервер возвращает304 Not Modifiedотклик.

С помощьюIf-None-MatchиETag

Веб-сервер (в зависимости от настроек, способа обслуживания страницы и т. Д.) Может отправлятьЗаголовок ETag.

Это идентификатор ресурса. Каждый раз, когда ресурс изменяется, например обновляется, ETag также должен меняться.

Это как контрольная сумма.

Браузер отправляетIf-None-Matchзаголовоккоторый содержит одно (или несколько) значений ETag.

Если совпадений нет, сервер возвращает свежую версию ресурса, в противном случае -304 Not Modifiedотклик.


Дополнительные уроки по сети: