Я работаю с пользовательским веб-сервером во встроенной системе и у меня возникают некоторые проблемы с правильной настройкой моих HTTP-заголовков для кэширования.
Наш веб-сервер генерирует весь динамический контент в виде XML, и мы используем полустатические XSL-файлы для его отображения с некоторыми динамическими JSON-запросами, добавленными для хорошей меры, наряду с полустатическими изображениями. Я говорю «полустатически», потому что проблемы возникают, когда нам нужно обновить микропрограмму, которая может изменить XSL и файлы изображений.
Вот что нужно сделать: кешировать XSL и файлы изображений, а не кешировать ответы XML и JSON. У меня есть полный контроль над HTTP-ответом, и в настоящее время я:
- Использование ETag с XSL и файлами изображений, использование измененного времени и размера для генерации ETag
- Настройка Cache-Control: отсутствие кэширования в ответах XML и JSON
Как я уже сказал, все работает прекрасно до обновления прошивки, когда XSL и файлы изображений иногда кэшируются. Я видел, что он отлично работает с последними версиями Firefox и Safari, но у меня были некоторые проблемы с IE.
Я знаю, что одним из решений этой проблемы было бы просто переименовать XSL и файлы изображений после каждой версии (например, logo-v1.1.png, logo-v1.2.png) и установить заголовок Expires на дату в будущее, но это будет сложно с файлами XSL, и я бы хотел этого избежать.
Примечание. На устройстве есть часы, но пользователь должен их установить, и они не могут быть на 100% надежными, что может вызвать проблемы с кэшированием при использовании ETags.
Какую лучшую практику я должен использовать? Я хотел бы избежать как можно большего числа запросов веб-сервера, но недействительными старые XSL и файлы изображений после обновления программного обеспечения являются приоритетом № 1.