Подтвердить что ты не робот

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

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

например.

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

../img/*.png

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

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

Это все изображения, которые могут существовать с числовым именем, останавливаясь полу-произвольно на 2 31 -1. Сколько из этих двух миллиардов файлов существует в вашем каталоге 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, поэтому на сервере должен быть создан список файлов.

Ответ 3

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

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

Ответ 4

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

Кроме того, я рекомендую использовать сетевой заголовок с wild card:

NETWORK:
*

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

Ответ 5

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

Например:

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