В кэше HTML5 нет кэша для самого файла html

index.php:

<html manifest="/cache.manifest">

cache.manifest

CACHE MANIFEST

CACHE:

/img.png
FALLBACK:
/ /offline.html
NETWORK:
*

Все отлично работает, за исключением того, что сам файл index.php извлекается в кеш (проверяется на хроме). Можно ли отключить кеширование файла, определяющего манифест, чтобы кэшировать только img.png?

Спасибо

Ответ 1

Нет, файл, который ссылается на манифест, всегда кэшируется. Из спецификация:

Ресурс, объявляющий манифест (с атрибутом манифеста), всегда будет извлекаться из кеша, независимо от того, указан ли он в кеше или нет, даже если он указан в пространстве имен в белой сети.

Ответ 2

У меня была та же проблема.

Я использовал iframe для загрузки страницы с именем 'go_offline.html' эта страница имеет атрибут manifest для элемента html и некоторого фиктивного содержимого.

iframe скрыт с помощью css

Таким образом, кэшируется только фиктивная страница, и все запросы попадают на резервную страницу в файле .manifest

Ответ 3

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

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

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

Примечание: нет необходимости вытягивать условный контент с сервера, если условие находится в строке запроса, разные строки запроса делают отдельный кеш