Подтвердить что ты не робот

Принудительное приложениеCache для перезагрузки кэшированных файлов

Я использую HTML5 applicationCache для хранения многих файлов Javascript, CSS, изображений и т.д. для страницы. Если я обновляю один из этих файлов, браузер никогда не перезагрузит его. Я пробовал следующее:

  • Вызов приложенияCache.update() при загрузке страницы
  • Прослушивание события updateready приложенияCache и вызов swapCache() и window.location.reload()
  • Добавление комментария метки времени к самому файлу манифеста, чтобы заставить браузер реализовать манифест, изменился

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

4b9b3361

Ответ 1

Чтобы принудительно загрузить новый (или измененный) файл, вы должны обновить файл манифеста (добавьте комментарий к номеру версии или любые изменения). Скорее всего, вы получаете сообщение об ошибке. Наиболее распространенным является то, что вы не можете показывать манифест с правильным типом mime (text/cache-manifest). Вы правильно настроили свой сервер? Самый простой способ проверить это - открыть страницу в Chrome и посмотреть на консоли и вкладку ресурсов в AppCache, чтобы узнать, есть ли ошибка (она будет жаловаться на неверный файл, который вы можете проверить). curl -I команда:

curl -I $manifest_file_URL

Также возможно, что ваш файл манифеста получает кеширование (вы можете установить для заголовков истечения срока его действия, чтобы он истекал немедленно). Также учитывайте последовательность перезагрузки: ваша страница сначала загружается из AppCache (если она есть), тогда браузер проверяет, обновлен ли файл манифеста. Если это так, загрузите и поместите в новую версию кеша, но это не будет автоматически обновлять страницу (и не будет swapCache()), вам придется обновить страницу (по крайней мере) еще раз.

См. также эту презентацию для получения дополнительной информации по этой теме.

Ответ 2

В Google Chrome, если вы просто делаете это во время отладки, есть простой способ: используйте окно инкогнито. Когда вы что-то измените в своем кеше, закройте окно инкогнито (если у вас их несколько, убедитесь, что вы их закрыли), откройте его и перейдите в приложение. Теперь это будет загружено с чистого листа, включая все ваши измененные файлы.

Это немного ядерный вариант, так как он уничтожит все ваши сохраненные данные, но он отлично работает для меня в процессе очистки CSS, например.

По какой-то причине очистка кеша страницы Chrome с помощью "Очистить данные просмотра" не работает.

Ответ 3

"вам нужно будет изменить сам файл манифеста кэша. Это может быть так же просто, как изменить один символ", которые работают для меня спасибо!

Ответ 4

Я боролся с этим некоторое время. Для меня ключ получал тип mime и кеширование заголовков прямо через nginx.

в/etc/nginx/mime.types:

text/cache-manifest                   manifest appcache;

в/etc/nginx/nginx.conf:

      # If the file exists as a static file serve it directly
      if (-f $request_filename) {
        expires -1;
        break;
      }

Линия expires -1 приводит к тому, что заголовок кэша устанавливается в no-cache.

Кроме того, чтобы очистить кеш в Firefox 23, я использовал:

  • Firefox- > Параметры- > Параметры- > Дополнительно- > Сеть: автономный веб-интерфейс и т.д. → Очистить сейчас

И чтобы увидеть, что было извлечено с сервера или нет:

  • Firefox- > Параметры веб-сайта- > Инструменты- > вкладка Сеть

Ответ 5

для вашего файла манифеста установите свой HTTP-заголовок для

'Cache-Control' to 'no-store'

добавить Content-Type для .manifest

'text/cache-manifest'

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

После этого измените символ в файле манифеста, и следующий запрос должен получить новый манифест.

Вы не говорите, какой сервер вы используете, но я сделал это для файлов, размещенных из ведра S3, и это сделало трюк, S3 обычно кэшируется в течение 24 часов.