Браузер Mozilla Firefox имеет «своеобразный» механизм обновления кэша, известный как «агрессивное кэширование». Проблема проявляется, когда мы совмещаем стандартное кэширование и Application Cache, а нам их совмещать необходимо, если мы хотим иметь кэширование в старых браузерах.
Дело в том, что при обновлении Application Cache в Mozilla Firefox данные также берутся из стандартного кэша без проверки изменений на сервере. Это приводит к тому, что в обновлённый Application Cache могут попасть устаревшие данные из стандартного кэша, т.е. обновление будет выполнено, но в кэше будут находиться старые версии файлов. Данный факт ставит все преимущества работы с Application Cache под сомнение.
Корректными способами обновления кэша в такой ситуации являются:
· изменение имени файла;
· 2-хступенчитое обновление.
В первом случаи мы просто меняем имя измененного файла во всех ресурсах, где он упоминается, в том числе и файле.manifest. Файла с первоначальным именем существовать не должно(!). В результате при очередной проверке изменения произойдёт ошибка загрузки несуществующего файла, и ресурсы кэша будут загружены с сервера.
Если вариант с изменением имени файла не подходит в силу тех или иных причин, то необходимо воспользоваться 2-хступенчитым обновлением кэша.
На первом этапе обновления мы исключаем изменённый файл из раздела CACHE файла.manifest и устанавливаем в заголовке отдаваемого файла старевший срок годности:
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Pragma: no-cache');
В результате у активных пользователей данный файл обновиться в стандартном кэше, а из Application Cache будет удалён.
На втором этапе мы уже включаем измененный файл в раздел CACHE, и он успешно кэшируется. К сожалению, данное обновление коснется только активных пользователей, поэтому старайтесь использовать переименование файлов.