Как сообщить браузеру, что кэш изображения устарел?
Ситуация: Есть товар с артикулом XXX. При загрузке карточки товара подтягивается изображение XXX.jpg. При смене изображения я просто перезаписываю XXX.jpg
Вопрос: В кэше остается старая версия XXX.jpg. Как попросить браузер один раз обновить кэш XXX.jpg?
Догадки: Если после смены изображения я единожды добавлю в путь аргумент, например, <img src="XXX.jpg?t=<?= time(); ?>">
то кэш XXX.jpg будет обновлен или у XXX.jpg и XXX.jpg?t=95683578 разный кэш?
Тогда подскажите, если просто добавлять в аргумент время изменения файла это хорошее решение?
Это самое простое и надежное решение. В принципе еще с заголовками можно поиграться: Cache-control, Expires, Pragma но то, как именно их настроить очень зависит от ваших задач.
romasovest, вот про это я и говорил. Это плохо. Обращение к файловой системе дополнительно это в принципе плохо. Это медленно, это дополнительно нагружает диск. На проекте в 10-20 человек вы это не заметите, но под нагрузкой просто ахтунг
Ankhena, мне кажется для css можно и совсем убрать кэширование это вряд ли сильно замедлит загрузку или прописывать версию в базу и добавлять ее к ссылке. Хотя это конечно мои ненужные пять копеек, пордонте.
romasovest, вариант с базой мне совсем не нравится.
Сейчас использую filemtime.
Но смутило утверждение Иван Шумов что это плохо.
Мне не понятна сила нагрузки на сервер при запросе времени изменения файла. Насколько она больше чем просто обращение за этим файлом.
Все равно рядом есть еще запрос, а существует ли этот css в природе и если нет, то отдается другой, стандартный.
Ankhena, диск даже при сверхбыстрых SSD это куда медленнее чем получение этих данных из памяти. К тому же вы хотите сделать даже не 1, а 2 запроса - на проверку наличия файла и на получение мета-информации (как я понял). Нужно организовывать проект чтобы отдавать максимально статику. С минимальным числом дополнительных проверок и кэшированием.
Ankhena, если вы говорите о стилях, JS и все такое то на это есть препроцессоры и генераторы asset'ов. Если о картинках, которые можно заливать и перезаливать - тот тут БД вам в помощь
вопросы инвалидация кэша одни из самых сложных в программировании, поэтому Не стоит искать серебряную пулю и думать что решение будет простым. В нормальных системах для каждого товара просто генерируются уникальные имена для каждого изображения основываясь на например идентификаторе товара и времени добавления изображение в базу . Для того чтобы их привязать к товару используется ключ - идентификатор владельца. Это так же решает проблемы с количеством изображений более 1 штуки на товар.