Нет отправленного заголовка с истечением срока действия, содержимое кешируется, сколько времени до того, как браузер выполнит условный запрос GET?

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

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

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

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


person Michael McCracken    schedule 02.05.2011    source источник
comment
Хороший практический ответ здесь: веб-мастера .stackexchange.com / questions / 53942 /   -  person Tim Grant    schedule 18.10.2016


Ответы (3)


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

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

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

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

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

person Jon Cram    schedule 02.05.2011
comment
Похоже, что когда кеш браузера заполнен, он начинает использовать свой алгоритм вытеснения кеша. А пока - только команда обновления или конец этого сеанса браузера заставит его снова запросить эти представления. - person Michael McCracken; 03.05.2011
comment
Третий абзац на самом деле неверен. Из указанной спецификации кэширования (раздел 13.4): Если специально не ограничено директивой cache-control (раздел 14.9), система кэширования МОЖЕТ всегда сохранять успешный ответ (см. Раздел 13.8) как запись кэша, МОЖЕТ вернуть его без проверки, если он свежий и МОЖЕТ вернуть его после успешной проверки. Это означает, что пользовательский агент может делать все, что захочет, если заголовок управления кешем не отправлен. Большинство браузеров используют комбинацию пользовательских настроек и эвристики, чтобы определить, нужно ли (и как долго) кэшировать в этой ситуации. - person Peter Hart; 19.03.2014
comment
@PeterHart проголосует, если вы поставите это как ответ - person Phil; 25.01.2017

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

person Peter Hart    schedule 27.01.2017

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

person lukiffer    schedule 02.05.2011
comment
Спасибо за ответ, lukiffer, но я спрашивал конкретно о сценарии, когда пользователь не обновляет страницу (пункт № 2 выше). - person Michael McCracken; 02.05.2011
comment
Если пользователь не закрывает или не обновляет страницу, клиенту HTTP нет необходимости повторно запрашивать ресурс на этой странице. - person Jon Cram; 02.05.2011
comment
Привет, Джон, используя пункт 3 - если пользователь продолжает просматривать сайт в обычном режиме, возможно, потребуется использовать images / css / js. Из того, что я вижу, браузер сбрасывает кеш обычно на основе сеанса, но не выполняет условные запросы на получение, если пользователь не нажимает кнопку обновления (даже при переходе на новую страницу, на которой уже есть кэшированные изображения. найдены) - person Michael McCracken; 03.05.2011
comment
@Michael: это интересно знать, было бы здорово, если бы ты когда-нибудь описал то, что найдешь! - person Jon Cram; 03.05.2011