В прошлом я не очень много изучал HTTP, но недавно у меня появилось немного свободного времени. В этой статье в основном обсуждаются некоторые сведения о кеше браузера и коде состояния 304. Я поделюсь этим здесь.Вот первая блок-схема HTTP-запроса:
1. Подробное обсуждение
1. Отключить ли кеширование
Отключить кэшированиеЭто означает, что в кеше не должно храниться содержимое о клиентских запросах и ответах сервера. Полное содержимое ответа загружается для каждого запроса, инициированного клиентом.
В заголовке запросаCache-Control: no-storeа такжеPragma: no-cacheкеш можно отключить.
Но есть и различия между ними,Pragma: no-cacheСовместимыйhttp 1.0,а такжеCache-Control: no-storeдаhttp 1.1который предоставил. следовательно,Pragma: no-cacheможет применяться кhttp 1.0а такжеhttp 1.1,а такжеCache-Control: no-storeможно применять только кhttp 1.1.
2. Проверять, не просрочена ли локальная копия
Проверять, не устарела ли локальная версияВ основном поCache-Controизno-cacheа такжеmust-revalidateЭти два необязательных значения управляют, где:
no-cache: Сообщите браузеру и кэш-серверу, что независимо от того, истек ли срок действия локальной копии, обязательно проверьте действительность копии на исходном сервере перед использованием копии ресурсов.must-revalidate: сообщите браузеру и кэш-серверу, что локальную копию можно использовать до истечения срока действия локальной копии; по истечении срока действия локальной копии она должна быть отправлена на исходный сервер для проверки достоверности.
3. Срок действия локальной копии истек?
Чтобы узнать, устарела ли локальная копия, нам нужно знатьМеханизм истечения кэша:
(1) В механизме выдоха самая важная инструкцияmax-age=<seconds>, который представляет собой максимальное время, на которое ресурс может быть замедлен; обычно он соответствуетmust-revalidateПри совместном использовании это выглядит так:
Cache-Control: max-age=60, must-revalidate
(2), если он не содержитmax-ageатрибут, он проверит, содержит ли онExpiresсвойства, сравниваяExpiresзначение и заголовок внутриDateЗначение свойства, чтобы определить, действителен ли кэш.
(3), еслиmax-ageа такжеexpiresАтрибутов нет, ищите в головеLast-ModifiedИнформация. Если есть, то время жизни кеша равно тому, что в шапкеDateзначение минусLast-ModifiedЗначение делится на 10 (Примечание: в соответствии с rfc2626 оно фактически умножается на 10%).
4. Если локальная копия не просрочена
Если локальная копия не просрочена, ресурс будет прочитан непосредственно из кеша, и будет возвращен код состояния 200.
5, если локальная копия истек
Если локальная копия истечет, она будетПредварительная подготовка к проверке валидности на исходный сервер.
Во-первых, он будет искать в заголовке запросаIf-None-Matchполе, значение которого последним было возвращено серверомETagЗначение заголовка ответа:
Если заголовок запроса неIf-None-Matchполе, оно будет искаться в заголовке запросаIf-Modified-Sinceполе, значение которого последним было возвращено серверомLast-ModifiedЗначение даты в заголовке ответа:
еслиIf-None-Matchа такжеIf-Modified-SinceЕсли его нет, данные будут запрашиваться напрямую с сервера.
6. Перейдите на исходный сервер для проверки достоверности.
Если заголовок запроса содержитIf-None-MatchилиIf-Modified-Since, он будет отправлен на исходный сервер для проверки достоверности,Если ресурс исходного сервера не изменился, он вернет 304, если есть изменение, вернет 200;
7. Некоторые из вышеперечисленных процессов также можно представить на следующем рисунке.
2. Дополнение
Частный кеш и публичный кеш
существуетCache-ControlТакже есть два значения:privateа такжеpublic,в:
publicДиректива указывает, что ответ может кэшироваться любым посредником (например, промежуточным прокси, CDN и т. д.). Если указаноpublic, некоторые страницы, которые обычно не кэшируются посредником (поскольку по умолчаниюprivate) (например, страницы с информацией об аутентификации HTTP (пароль учетной записи) или некоторые страницы, влияющие на код состояния), будут кэшироваться им.
а такжеprivateЭто означает, что ответ предназначен для одного пользователя, посредник не может кэшировать ответ, и ответ может использоваться только в частном кеше браузера.
3. Справочные документы
HTTP-протокол MDN Ответ «Юн Чжао» на веб-сайте segmentfault Блог Цзы Юнфэй
исходный адресЛичный сайт Ван Юлюэ