Перенаправить браузер в другое место и принудительно обновить - PullRequest
1 голос
/ 17 февраля 2011

Я хотел бы попросить вас предложить предложение о недействительности кэша браузера.

Предположим, у нас есть индексная страница, которая возвращается клиенту с заголовками http:

Cache-Control: public, max-age=31534761
Expires: Fri, 17 Feb 2012 18:22:04 GMT
Last-Modified: Thu, 17 Feb 2011 18:22:04 GMT
Vary: Accept-Encoding

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

Мой вопрос: возможно ли создать веб-ресурс (например, в uri / invalidateIndex), чтобы при попадании пользователя на этот ресурс он перенаправлялся на страницу индекса таким образом, чтобы браузер аннулировал свой кэш и запрашивалсервер для свежего контента?

Ответы [ 2 ]

1 голос
/ 20 мая 2011

У меня похожие проблемы с моим собственным проектом, поэтому у меня есть несколько предложений, если вы еще не нашли какое-либо решение ...

  1. Я видел это как способ, с помощью которого jQuery заставляет ajax-запросы не кэшироваться: он добавляет HTTP-параметр в URL со случайным значением или именем, так что каждый новый запрос имеет свой собственный URL и браузер тогда никогда не использует кеш. На самом деле вы могли бы перенаправить URI / invalidateIndex на такой URL. Проблема, конечно, заключается в том, что браузер фактически никогда не делает недействительным исходный URL-адрес индекса и что браузер всегда будет повторно запрашивать ваш индекс.

  2. Конечно, вы можете изменить http-заголовок Cache-Control с меньшим максимальным возрастом, скажем, до часа, чтобы кэш-память делалась недействительной каждый час или около того

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

2, 3 можно даже объединить, я думаю ...

0 голосов
/ 21 февраля 2011

Нет прямого способа попросить браузер очистить кэш определенного файла, но если у вас всего несколько систем, подобных этой, и достаточной пропускной способности, вы можете попытаться вернуть большие объекты на одном и том же протоколе, хосте ипорт, так что кэш начинает выселять старые объекты.См. Например, https://bugzilla.mozilla.org/show_bug.cgi?id=81640.

...