Firefox не загружает страницу из автономного манифеста кеша, но отлично работает в Chrome (+ советы по устранению неполадок с манифестом кеша)

Это в основном идентично этим вопросам SO, на которые нет ответа: Автономное веб-приложение не кэшируется в Firefox, но нормально в Chrome

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

Проблема: нажмите кнопку перезагрузки/обновления страницы, и страница должна перезагрузиться из автономного кеша, но этого не происходит.

Он отлично работает в Chrome 23: когда я отключаюсь от Интернета и обновляю страницу, она загружается нормально, и консоль показывает событие NoUpdate кэша приложений.

Однако Firefox 15.0.1 показывает мне мою страницу 404.

Устранение неполадок (Firefox): перейдите в Firebug и щелкните DOM, затем applicationCache. Статус показывает 0, что означает некэшированный (страница не была сохранена в автономном режиме).

Устранение неполадок (Firefox): перейдите в «Параметры Firefox» -> «Дополнительно» и просмотрите «Автономный веб-контент и данные пользователя». Это показывает, что мой домен использует 1,4 МБ данных для автономного использования. (Это хорошее место, чтобы проверить, была ли ваша страница кэширована).

Устранение неполадок (Firefox): Откройте новую вкладку и перейдите в раздел about:cache. Здесь вы должны увидеть заголовок «Автономное кэш-устройство». Здесь вы можете увидеть каталог кеша, в котором хранятся ваши автономные файлы кеша. Если вы нажмете «Список записей кэша», вы увидите файлы в манифесте автономного кэша.

Есть две вещи, которые я нахожу здесь странными: 1) когда я нажимаю на любой из файлов в списке, он переходит на пустую страницу с надписью «Информация о записи в кэше. Выбранная вами запись в кэше недоступна». Однако файлы существуют и не являются пустыми в каталоге кеша. 2) Хотя перечислены все файлы из манифеста кеша, страница, которую я вызываю, здесь не указана (в Chrome DevTools она отображается в манифесте как Мастер: он кэшируется автоматически, даже если он явно не указан в файле манифеста кэша).

Вот что я вижу, когда я в сети: с холодным (пустым) кешем, когда я загружаю страницу, консоль показывает проверку, загрузку, ход выполнения и кэшированные события, но состояние кеша не кэшировано. В основном файлы кеша скачиваются, но к ним нет доступа. Приложение Firebug DOM applicationCache говорит: 0 элементов в автономном кеше (это противоречит тому, что показано в about:cache и Options -> Advanced). Статус 1, что означает бездействие. Когда я смотрю на вкладку «Сеть» в Firebug в сети, она показывает запрос GET для страницы с ответом 200 OK. Параметр «Истекает» показывает среду, 31 декабря 1969 года, что, я думаю, означает, что страница всегда будет извлекаться. Другие файлы показывают ответ 304 Not Modified, что означает, что они загружаются из кеша браузера, а не из офлайн-кеша (аналогичный ответ Chrome для этих файлов — 200 OK (из кеша), что означает, что они загружаются из офлайн-кеша). кеш, а не кеш браузера).

Когда я в автономном режиме: с «некэшированным» кешем запрос GET завершается ошибкой, и он загружает автономную резервную страницу 404 с ответом 200 OK (BFCache).

Кажется, автономный кеш загружается, потому что он физически существует на диске, а события прогресса отображаются в консоли, но Firefox никогда не запускает кешированное событие, поэтому некоторые ресурсы не загружаются успешно. Все файлы имеют формат png, js или php, поэтому никаких сумасшедших форматов файлов. Chrome без проблем загружает в кеш точно такие же файлы. Я также пробовал мобильный Safari, и он успешно перезагружает страницу из автономного кеша.

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

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

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

Начало страницы:

<!DOCTYPE html> 
<html manifest="/directory/manifest.php"> 

а затем manifest.php просто

header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";

и т. д. и т. д. Он использует RecursiveDirectoryIterator для получения всех файлов в каталоге (кроме самого кеша, который включен по умолчанию).


person edpeciulis    schedule 29.09.2012    source источник
comment
в данный момент я работаю в приложении в автономном режиме, обновите версию кеша манифеста так: # версия 20180316144403900, и браузер сможет обнаружить это изменение и обновить все, что содержится в файле манифеста.   -  person Martin Chinome    schedule 16.03.2018