Обязательно для http-интервью: принудительное кэширование и кэширование по согласованию

HTTP

В этой статье будет представлена ​​разница между принудительным и согласованным кэшированием в http.

1. Что такое кеш?

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

Механизм HTTP-кэширования в основном задается в заголовке ответа http.Соответствующие поля в заголовке ответа: Expires, Cache-Control, Last-Modified и Etag.

в протоколе HTTP 1.0. Короче говоря, он говорит браузеру получить ресурсы (представления) непосредственно из кеша, не обращаясь к серверу, чтобы получить их до оговоренного времени.

Другой:

  • Поскольку Expires настроен на время, а время указано по среднему времени по Гринвичу (GMT), а не по местному времени, у него более высокие требования ко времени.

2. Как браузер определяет, использовать ли кеш?

Первый запрос:

Второй запрос для той же страницы:

3. Кэшированные категории

Кэш браузера делится на сильный кеш и кеш согласования.

Сильный кеш: браузер не будет отправлять запрос, как сервер, напрямую считывает файл из локального кеша и возвращает код состояния: 200 OK

Кэш памяти 200 форм: Без доступа к серверу ресурс, как правило, загружается и кэшируется в памяти, а кэш считывается непосредственно из памяти. После закрытия браузера данных не будет (ресурсы высвобождаются), а кэш из памяти не появится при повторном открытии той же страницы.

200 из дискового кеша: Без доступа к серверу ресурс был загружен в определенное время до этого, и кеш читается напрямую с жесткого диска.После закрытия браузера данные все еще существуют, и этот ресурс не будет освобожден с закрытием страницы. ..будет из кэша диска.

Сначала получите доступ к кешу памяти, затем к кешу диска и, наконец, запросите сетевые ресурсы.

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

4. Параметры заголовка для сильного кеша и кеша согласования

Сильный кеш:

Истекает: время истечения срока действия, если время установлено, браузер будет напрямую читать кеш в течение установленного времени и больше не будет запрашивать

Cache-Control: когда установлено значение max-age=300, это означает, что ресурс будет загружен снова в течение 5 минут после правильного времени возврата запроса (браузер также зафиксирует это), и сильный кеш будет быть пораженным.

cache-control: В дополнение к этому полю есть следующие наиболее часто используемые значения параметров:

(1) max-age:用来设置资源(representations)可以被缓存多长时间,单位为秒;
(2) s-maxage:和max-age是一样的,不过它只针对代理服务器缓存而言;
(3)public:指示响应可被任何缓存区缓存;
(4)private:只能针对个人用户,而不能被代理服务器缓存;
(5)no-cache:强制客户端直接向服务器发送请求,也就是说每次请求都必须向服务器发送。服务器接收到     请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更。这个很容易让人产生误解,使人误     以为是响应不被缓存。实际上Cache-Control:     no-cache是会被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
(6)no-store:禁止一切缓存(这个才是响应不被缓存的意思)。

cache-control — это поле заголовка http1.1, а expires — это поле заголовка http1.0. Если expires и cache-control существуют одновременно, cache-control переопределит expires. Рекомендуется писать оба.

Согласовать кеш:

Last-Modifed/If-Modified-Since и Etag/If-None-Match отображаются парами соответственно, показывая взаимно однозначное соответствие.

Etag/If-None-Match:

Этаг:

Etag — это атрибут HTTP 1.1, который генерируется сервером (Apache или другими инструментами) и возвращается во внешний интерфейс, чтобы помочь серверу управлять проверкой кеша на стороне Интернета. В Apache значение ETag получается путем хэширования узла индекса (INode), размера (Size) и времени последней модификации (MTime) файла по умолчанию.

If-None-Match:

Когда ресурс истекает, браузер обнаруживает, что в заголовке ответа есть Etag в заголовке ответа, и еще раз, как и запросы сервера, заголовок запроса, если он не совпадает (значение - это значение ETAG). Сервер получает запрос на сравнение и решает вернуть 200 или 304

Last-Modified/If-Modified-Since:

Последнее изменение:

Браузер отправляет время последней модификации ресурса на сервер

Если-Изменено-С:

Когда срок действия ресурса истекает (браузер считает, что максимальный возраст логотипа Cache-Control истек) и обнаруживает, что в заголовке ответа содержится оператор Last-Modified, он снова запрашивает сервер с заголовком if-modified-since, чтобы укажите время запроса. После получения запроса сервер находит, что if-modified-since существует, он сравнивает его со временем последней модификации запрошенного ресурса (Last-Modified), если время последней модификации новее (больше), значит ресурс был изменен снова, и возвращается последний ресурс HTTP 200 OK, если время последней модификации старое (маленькое), это означает, что у ресурса нет новой модификации, и он отвечает HTTP 304 и уходит в кеш.

  • Точность времени Last-Modified/If-Modified-Since составляет секунды, в то время как Etag может быть более точным.
  • Приоритет Etag выше, чем Last-Modifed, поэтому сервер сначала проверит Etag.
  • Last-Modified/If-Modified-Since — это поле заголовка http1.0.