Как указать шаблон в манифесте кэша HTML5 для загрузки всех изображений в каталог? - PullRequest
21 голосов
/ 04 ноября 2011

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

* 1003 Е.Г. *

CACHE MANIFEST
# 2011-11-3-v0.1.8
#--------------------------------
# Pages
#--------------------------------
../index.html
../edit.html
#--------------------------------
# JavaScript
#--------------------------------
../js/jquery.js
../js/main.js
#--------------------------------
# Images
#--------------------------------
../img/*.png

Можно ли это сделать? Опробовал его и в нескольких браузерах с ../img/*, но, похоже, он не работает.

Ответы [ 5 ]

21 голосов
/ 04 ноября 2011

Было бы проще, но как это будет работать?Файл манифеста - это то, что анализируется и обрабатывается в браузере, который не имеет специальных знаний о файлах на вашем сервере, кроме того, что вы ему сказали.Если браузер видит это:

../img/*.png

Какое первое изображение браузер должен запросить с сервера?Давайте начнем с этих:

../img/1.png
../img/2.png
../img/3.png
../img/4.png
...
../img/2147483647.png

Это все изображения, которые могут существовать с числовым именем, полу-произвольно останавливаясь на 2 31 -1 .Сколько из этих 2 миллиардов файлов существует в вашем каталоге img?Вы действительно хотите, чтобы браузер, выполняющий все эти запросы, получал только 2 миллиарда 404?Для полноты информации браузер, вероятно, также захочет запросить все заполненные нулями эквиваленты:

../img/01.png
../img/02.png
../img/03.png
../img/04.png
...
../img/001.png
../img/002.png
../img/003.png
../img/004.png
...
../img/0001.png
../img/0002.png
../img/0003.png
../img/0004.png
...

Теперь браузер сделал более 4 миллиардов HTTP-запросов на файлы, которых в основном нет, и это еще даже неЗанимался буквами или пунктуацией при построении возможных имен файлов, которые могут существовать на сервере.Это не осуществимый способ работы файла манифеста.Сервер - это место, где файлы в каталоге img известны, поэтому именно на сервере должен быть составлен список файлов.

17 голосов
/ 04 ноября 2011

Я не думаю, что это так работает. Вы должны будете указать все изображения одно за другим или иметь простой PHP-скрипт для циклического просмотра каталога и вывода файла (с правильным заголовком text/cache-manifest, конечно).

3 голосов
/ 15 мая 2012

Было бы большой проблемой безопасности, если бы браузеры могли запрашивать списки папок - вот почему Tomcat отключает эту возможность по умолчанию.

Но браузер может найти все совпадения с подстановочными знаками, на которые ссылаются страницы, которые он кэширует. Этот подход все еще будет проблематичным (например, что касается изображений, которые изначально не использовались, но были установлены динамически с помощью JavaScript и т. Д., И для этого требовалось бы, чтобы все кэшированные элементы не только загружались, но и анализировались).

2 голосов
/ 09 ноября 2012

Если вы пытаетесь автоматизировать этот процесс, а не делать это вручную. Используйте скрипт, или как я использую manifestR . Он выведет ваш файл манифеста / appcache, и все, что вам нужно сделать, это скопировать и вставить. Я использовал это успешно и обычно нужно только сделать несколько изменений.

Также я рекомендую использовать сетевой заголовок с подстановочным знаком:

NETWORK:
*

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

0 голосов
/ 14 апреля 2017

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

Например:

<meta http-equiv="Cache-control" content="public">
  • Public - может кэшироваться в общедоступных общих кэшах.
  • Private - может кэшироваться только в приватном кэше.
  • No-Cache - не кэшироваться.
  • No-Store - может кэшироваться, но не архивироваться.
...