Обновления автономного кэша HTML5 не отображаются в Firefox - PullRequest
3 голосов
/ 06 сентября 2011

У меня есть файл index.php в моем docroot.Он производит вывод, который начинается с этого:

<!DOCTYPE html> 
<html manifest="manifest.appcache">

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

CACHE MANIFEST

#version 8-25-2011

CACHE:

#internal HTML documents
#this tells the browser to cache the HTML it retrieves from http://example.com/
/

NETWORK:
*

Автономный доступ работает нормально с этой настройкой, но обновление не работает, как я ожидал в Firefox.файл index.php, а затем измените комментарий в файле cache.manifest, браузеры получат новый вывод index.php и будут использовать его в кэше.

Однако в Firefox, похоже, не важно, что я обновил файл manifest.appcache.Я подозреваю, что если я подожду достаточно долго, он обновится, но я пробовал часы ожидания.

Как мне найти и устранить мою проблему с кэшированием?

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

Какие заголовки кеша HTTP вы отправляете вместе с файлом index.php? Если вы не установили такие вещи, как заголовки Cache-control: и Expires:, тогда Firefox может обновлять версию страницы в кеше приложения из обычного кеша, а не запрашивать ее снова с сервера.

РЕДАКТИРОВАТЬ ПОСТЕРОМ ВОПРОСА :

Для тех, кто хочет знать, что именно это произошло, вот что я положил в свой файл .htaccess на основе этого ответа и прочтения http://www.diveintohtml5.info/offline.html:

<Files *.appcache>
    ExpiresActive On
    ExpiresDefault "access"
</Files>

Надеюсь, это поможет следующему человеку!

0 голосов
/ 25 февраля 2017

Я знаю, что я действительно опоздал на вечеринку, но я видел эту проблему в Firefox в течение многих лет и надеялся, что основная ошибка будет исправлена.

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

  1. index.html загружается и указывает файл .appcache в теге html.
  2. Файл .appcache генерируется динамически с использованием сценария PHP. Сценарий хэширует все включенные файлы для создания уникальной версии хэша, которая включена в манифест. Это означает, что изменение любых файлов, перечисленных в манифесте, приводит к перезагрузке кэша.
  3. Мой файл .htaccess имеет следующее, чтобы предотвратить кэширование манифеста .appcache:

    <Files *.appcache> ExpiresActive On ExpiresDefault "access plus 0 seconds" </Files>

  4. Мой код Javascript обнаруживает обновление appcache и перезагружает страницу после получения обновленных файлов:

    appCache.addEventListener('updateready', function(e) { console.log("Appcache update finished, reloading..."); setLoadingBar(100, "Loading..."); appCache.swapCache(); location.reload(); });

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

Исправление оказалось болезненно простым!

Все, что было необходимо, это изменить строку location.reload(), чтобы включить истинный параметр:

location.reload(true)

Кажется, это указывает на то, что Firefox обслуживает файлы из своего обычного кэша, а не использует хранимые файлы appcache, даже если файлы appcache новее. Я предполагаю, что это потому, что Firefox ставит нормальный механизм кэширования перед appcache следующим образом:

Запрос -> Обычный кэш -> Appcache -> Сетевой запрос

Но это только предположение.

...