Заголовок с истекшим сроком действия не отправлен, содержимое кэшировано. Как долго браузер выполняет условный запрос GET? - PullRequest
30 голосов
/ 02 мая 2011

Примите настройки браузера по умолчанию, и контент отправляется без заголовков с истечением срока действия.

  1. пользователь посещает веб-сайт, браузер кэширует изображения и т. Д.
  2. пользователь не закрывает браузер или не обновляет страницу.
  3. пользователь продолжает просматривать сайт в обычном режиме.
  4. предполагает, что просмотр по какой-либо причине не создает дамп кеша.

Браузер будет кэшировать изображения и т. Д., Когда пользователь просматривает веб-страницы, но неясно, когда он выдаст условный запрос GET для запроса свежести контента (помимо обновления страницы).Если это специфическая настройка для браузера, где я могу увидеть его значение (для таких браузеров, как: safari, IE, FireFox, Chrome).

[править: да - я понимаю, что вы всегда должны отправлять заголовки expires.Однако это исследование направлено на понимание того, как браузер работает с контентом без заголовков expires.]

Ответы [ 3 ]

20 голосов
/ 27 января 2017

Из спецификации HTTP-кэширования (раздел 13.4): Если директива cache-control (раздел 14.9) специально не ограничена, система кэширования МОЖЕТ всегда хранить успешный ответ (см. Раздел 13.8) как запись в кэше МОЖЕТ вернуть ее без проверки, если она свежая, и МОЖЕТ вернуть ее после успешной проверки. Это означает, что пользовательский агент может делать все, что ему захочется, если заголовок управления кэшем не отправляется. Большинство браузеров используют комбинацию пользовательских настроек и эвристики, чтобы определить, следует ли (и как долго) кэшировать в этой ситуации.

10 голосов
/ 02 мая 2011

HTTP / 1.1 определяет выбор механизмов кэширования;заголовок expires только один, есть также заголовок cache-control.

Чтобы прямо ответить на ваш вопрос: для ресурса, возвращенного без заголовка expires, необходимо учитывать возвращенные директивы cache-control.

HTTP / 1.1 не определяет поведение кэширования для ресурса, который не имеет заголовков, связанных с кэшем.Если ресурс отправляется без заголовков cache-control или expires, вы должны исходить из того, что клиент будет делать регулярный (безусловный) запрос при следующем запросе тех же ресурсов.

Любое отклонение от этого поведенияквалифицирует клиента как не полностью совместимого HTTP-клиента, и в этом случае возникает вопрос: какое поведение следует ожидать от неконформного HTTP-клиента?Нет никакого способа ответить на этот вопрос.

Кэширование HTTP является сложным, чтобы полностью понять, что должен делать совместимый клиент в данном сценарии, прочитать и понять спецификацию HTTP-кэширования .

4 голосов
/ 02 мая 2011

Если вы не отправите заголовок expires, большинство браузеров будут отправлять запрос GET для каждого последующего обновления и либо получат HTTP 200 OK (он снова загрузит содержимое) или HTTP 304 Not Modified (и использовать данные в кеше).

...