Как указать подстановочный знак в манифесте кэша HTML5 для загрузки всех изображений в каталоге?
У меня есть много изображений в папке, которые используются в приложении. При использовании манифеста кеша было бы проще в обслуживании, если бы я мог указать подстановочный знак для загрузки всех изображений или файлов в определенном каталоге для кэширования.
Например
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 ответов
Я не думаю, что это работает таким образом. Вы должны будете указать все изображения одно за другим или иметь простой PHP-скрипт для циклического просмотра каталога и вывода файла (с правильным text/cache-manifest
заголовок конечно).
Было бы проще, но как это будет работать? Файл манифеста - это то, что анализируется и обрабатывается в браузере, который не имеет специальных знаний о файлах на вашем сервере, кроме того, что вы ему сказали. Если браузер видит это:
../img/*.png
Какое первое изображение браузер должен запросить с сервера? Давайте начнем с этих:
../img/1.png
../img/2.png
../img/3.png
../img/4.png
...
../img/2147483647.png
Это все изображения, которые могут существовать с числовым именем, полу-произвольно останавливаясь на 231-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
каталоги известны, поэтому на сервере должен быть составлен список файлов.
Было бы большой проблемой безопасности, если бы браузеры могли запрашивать списки папок - вот почему Tomcat теперь отключает эту возможность по умолчанию.
Но браузер может найти все совпадения с подстановочными символами, на которые ссылаются страницы, которые он кэширует. Этот подход все еще был бы проблематичным (например, что касается изображений, которые изначально не использовались, но устанавливались динамически с помощью JavaScript и т. Д., И для этого требовалось бы, чтобы все кэшированные элементы не только загружались, но и анализировались).
Если вы пытаетесь автоматизировать этот процесс, а не делать это вручную. Используйте скрипт, или как я использую manifestR. Он выведет ваш файл манифеста /appcache, и все, что вам нужно сделать, это скопировать и вставить. Я использовал его успешно и обычно нужно всего лишь внести несколько изменений.
Также я рекомендую использовать сетевой заголовок с подстановочным знаком:
NETWORK:
*
Это позволяет всем активам из других связанных доменов через JSON, например, загружать в кеш. Я считаю, что это единственный заголовок, где вы можете указать подстановочный знак. Как и другие здесь сказали, это из соображений безопасности.
Манифест кэша теперь устарел, и вы должны использовать заголовки HTML для управления кэшированием.
Например:
<meta http-equiv="Cache-control" content="public">
- Public - может кэшироваться в общедоступных общих кэшах.
- Приватный - может кэшироваться только в приватном кеше.
- No-Cache - не может быть кэширован.
- No-Store - может быть кэширован, но не заархивирован.