#html #manifest #offline-caching
#HTML #манифест #автономное кэширование
Вопрос:
Я пытаюсь заставить автономное хранилище HTML5 работать простым способом. Я прочитал информацию о DiveIntoHTML5, и это, кажется, имеет смысл, но, похоже, это просто не работает для меня. Я задавался вопросом, может ли кто-нибудь помочь мне отладить это.
По сути, я создал домашнюю страницу для приложения, index.htm . Итак, мое приложение находится в Интернете по адресу http://www.mydomain.com/online/index.htm . Пользователи будут посещать эту страницу, где они обычно будут делать все свои дела изо дня в день. При посещении этого URL-адреса будет создана куча кэшированных файлов, которые затем можно будет посетить http://www.mydomain.com/offline и просматривать рабочую версию приложения, когда они находятся в автономном режиме.
Первые несколько строк кода на главной странице в Интернете следующие:
<!DOCTYPE html>
<html manifest="cache.manifest">
<head>
...etc
Я сгенерировал обычный текстовый файл под названием ‘cache.txt ‘ и добавил к нему в Блокноте следующее содержимое:
CACHE MANIFEST
http://www.mydomain.com/offline/scripts/jquery-1.6.3.min.js
http://www.mydomain.com/offline/scripts/jquery-ui-1.8.16.custom.min.js
http://www.mydomain.com/offline/scripts/modernizr.min.js
http://www.mydomain.com/offline/scripts/json2.min.js
http://www.mydomain.com/offline/scripts/jquery.deserialize.js
http://www.mydomain.com/offline/scripts/jquery.cookie.js
http://www.mydomain.com/offline/scripts/main.js
http://www.mydomain.com/offline/css/main.css
http://www.mydomain.com/offline/css/structure-details.css
http://www.mydomain.com/offline/css/ui-lightness/jquery-ui-1.8.16.custom.css
http://www.mydomain.com/img/header.gif
http://www.mydomain.com/offline/img/bg.png
http://www.mydomain.com/offline/img/header_riser.gif
http://www.mydomain.com/offline/img/logo.png
http://www.mydomain.com/offline/img/offline.png
http://www.mydomain.com/offline/index.htm
Затем я переименовал этот файл в ‘cache.manifest’ и загрузил его в корень онлайн-приложения (на том же уровне, что и моя домашняя страница), чтобы он был доступен по адресу http://www.mydomain.com/online/cache.manifest .
Предположительно, хостинговая компания добавила тип содержимого «текст / кэш-манифест» ко всем файлам с расширением .manifest в IIS. Я думаю, что это работает, потому что, когда я просматриваю файл в Firefox на http://www.mydomain.com/online/cache.manifest Firebug сообщает мне, что тип контента:
Content-Type cache-manifest
Или это должно возвращать «текст / кэш-манифест»? Возможно, это проблема?
Когда я просматриваю папку автономного хранилища в своей системе (C:UsersMeAppDataLocalMozillaFirefoxProfilesb12u6xza.default там вообще нет ничего, связанного с этим доменом.
Кто-нибудь может подсказать, что может пойти не так, поскольку я немного озадачен?
Ответ №1:
Прежде всего, спецификация изменилась, теперь вы должны использовать .appcache
расширение as manifest.
Во-вторых, тип mime должен быть определен так, как вы говорите text/cache-manifest
. Я на самом деле не связан с IIS, но, похоже, есть два способа добавить этот тип MIME: либо через интерфейс администрирования IIS, либо через файл web.config
Кроме того, я бы рекомендовал вам протестировать это с помощью Google Chrome, поскольку в его консоли отображаются все данные и ошибки синтаксического анализа манифеста, в том числе, когда MIME-тип манифеста распознается неправильно.
Комментарии:
1. в спецификации указано, что файл может иметь любое расширение
Ответ №2:
Есть некоторые проблемы, о которых вы должны позаботиться:
- Chrome (и я предполагаю, что наконец-то все браузеры) обрабатывает файл кэша только по защищенным запросам. Если ваш запрос небезопасен, ваш кэш не будет выполнен.
- Мобильные браузеры (по крайней мере, устройства, которые я мог протестировать) не заботятся о безопасных или небезопасных запросах. Но я бы предпочел быть готовым к переменам в политике.
- Я ломал голову, пытаясь понять, почему в Android мой файл работал нормально, а в iOS он не работал, и причина заключалась в том, что я запускал свой браузер в режиме инкогнито. iOS в режиме инкогнито не может кэшировать страницу, и вы получаете сообщение об ошибке.
Если я найду еще проблемы, я запишу их.
С уважением.
Комментарии:
1. Ваш ответ завершил мой поиск. Если запрос не защищен, ваш кэш не будет выполнен! Я ломал голову, пытаясь понять, почему манифест не работает на apache.
2. Нет, я его протестировал, это не имеет ничего общего с безопасным подключением. Это должно работать нормально и локально, без каких-либо https
Ответ №3:
Я трачу много времени на это (на свою собственную проблему), автономный кэш не работал. Сделал все возможное, что мог, изменил имя файла кэша, добавил обработчик через htaccess, загрузил файл с локального на живой сервер, все та же проблема. Наконец-то я получил некоторую помощь от этого вопроса.
Я протестировал его в Safari, и он работал нормально. Проблема была в браузере Chrome. Я также попробовал https, как предложил другой пользователь, что также не устранило проблему. Так что, возможно, в Chrome есть расширение, которое запрещает ему использовать файл кэша. Перед устранением неполадок сначала протестируйте его в стандартных браузерах Safari, FireFox, IE, Opera. Не тестируйте в нестандартных браузерах, таких как Brave, в нем это не сработало.
Официально от Google
Что подтверждает устаревание в версии 61 и далее. Я набираю 80 баллов.
Chrome поддерживает applicationcache и манифест для автономного приложения html5.
Кэш приложений / Автономное приложение / Кэш манифеста.
Осознавая, что applicationcache устарел, но пока замена (обслуживающий персонал) не ратифицирована, ее еще предстоит заменить в устаревших системах, которые у нас есть.
Однако недавнее обновление браузера, похоже, отключило автономную функциональность на сайте HTTPS. Наши файлы манифеста теперь игнорируются, а вместо них отображается Chrome dinosaur.
При повторной проверке через браузеры кажется, что это распространено в Chrome 61 и новее, однако, похоже, это проявилось только недавно.
Проблема с Chrome? или комбинация Chrome и базовой ОС? У нас есть Android / Windows, оба показывают ту же проблему, начиная с 61 года.
Примечание: кэш HTML5 устарел
Все браузеры собираются отказаться от этой функции, я заметил, что они не работают ни в одном из последних браузеров. Mozilla настоятельно рекомендует не использовать этот MDN и не использовать его.
Ответ №4:
попробуйте добавить эти строки в httpd.conf .. это может вам помочь
AddType text/cache-manifest .manifest
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/cache-manifest "access plus 0 seconds"
</IfModule>
Комментарии:
1. Это для Apache или IIS? Моя среда — Windows / IIS.
Ответ №5:
Вам лучше протестировать с помощью консоли Chrome!(вы не можете увидеть их в сети Chrome)
Мой пример(visit:www.mustrank.com/views/1.php ).
Посмотрите на вывод консоли Chrome ниже: сначала создается файл манифеста «website.appcache», а затем исходные файлы «1.html » и «main.css» загружаются
[Создание кэша приложения с помощью манифеста www.mustrank.com/views/website.appcache 1.php: 1
Событие проверки кэша приложения 1.php:1
Событие загрузки кэша приложения 1.php:1
Событие выполнения кэша приложения (0 из 2) www.mustrank.com/views/1.html 1.php: 1
Событие выполнения кэша приложения (1 из 2) www.mustrank.com/css/main.css 1.php: 1
Событие выполнения кэша приложения (2 из 2) 1.php:1
Кэширование события в кэше приложения]