Как предотвратить отображение содержимого из кэша Back-Forward в Firefox? - PullRequest
9 голосов
/ 30 августа 2011

Браузер: Firefox 6.0

У меня есть страница A со следующей настройкой, чтобы убедиться, что содержимое НЕ сохраняется в bfcache браузера:

1) $(window).unload(function(){});

2) Следующие заголовки HTTP:

<meta http-equiv="pragma" content="no-cache" /> 
<meta http-equiv="expires" content="-1" />
<meta http-equiv="cache-control" content="no-cache"/>

Я также подключил события pagehide и pageshow.Когда я ухожу со страницы, pagehide вызывается со значением ПРАВИЛЬНО для свойства события persisted = false (вот что нужно: нет сохранения в кэше!)

После навигации по нескольким страницам яwindow.history.go(-2);, чтобы вернуться на страницу A. Теперь я хочу, чтобы Firefox опрашивал сервер на предмет обновленной версии, а не отображал его из кэша.pageshow страницы A вызывается со значением CORRECT для свойства события persisted = false (что означает, что страница НЕ загружается из кэша).НО содержимое страницы не является данными сервера;это устаревший контент (такой же, как при первоначальном переходе со страницы)!Fiddler также не показывает новый запрос к серверу.

Google Chrome также демонстрирует такое же поведение.IE работает как положено (перезагружает свежие данные)!

Есть идеи, что мне не хватает?

Заранее спасибо!

Ответы [ 3 ]

9 голосов
/ 31 августа 2011

Включено несколько кэшей. Это кэш документов браузера (bfache), кэш HTTP браузера и, возможно, промежуточные кеши HTTP.

Теги <meta>, которые вы показываете выше, не имеют никакого эффекта в текущем Chrome или Firefox. Они могут иметь эффект в IE.

Скорее всего, ваша страница просто читается из HTTP-кэша браузера.

Если вы действительно хотите отправлять HTTP-заголовки без кеша, вам следует это сделать. Но они должны быть настоящими HTTP-заголовками: как я уже говорил выше, тег «1008» «эквиваленты» ничего не делают.

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

2 голосов
/ 12 августа 2016

Если вы установите Cache-Control: "no-cache, no-store, must-revalidate" в заголовки http, страница не будет кэшироваться в обратном кеше.

Firefox также рассматривает обработчики событий для события beforeunload как сигнал не сохранять страницу в BFC, но Safari игнорирует такие обработчики, поэтому лучше установить правильные заголовки http, чтобы указать характер содержимого страницы (кэшируемой или переменной)

2 голосов
/ 26 марта 2013

Ответ ниже не работает:

От ответа на SO , добавление события unload в окно вызывает кэш назад / вперед вбыть очищенным.

ОБНОВЛЕНИЕ.ВОЗМОЖНОЕ РЕШЕНИЕ:

BFCache может преподнести сюрпризы разработчикам, потому что, по крайней мере, в Firefox при перемещении назад / вперед страница не обновляется, даже если об этом сообщают заголовки HTTP.Поэтому лучше предположить, что страница не обновится .

С другой стороны, в чем разница между получением страницы с устаревшими данными из-за BFCache и поиском в браузере вкладки, которую вы не загружали целую вечность?

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

...