Закачка/обновление изображений на сервер. Изображения к кэше

gv0zd

Новичок
Есть каталог товаров.
Есть админский интерфейс.
У товара может быть фотография.

Предположим структура такая id товара = 7
Изображение для такого товара записывается по адресу /images/products/7.jpg

Все работает ок. Пришла необходимость сменить изображение. Новое тоже будет закачано по адресу /images/products/7.jpg

Т.е. изображение новое, а адрес старый. В таком случае чаще всего у старых посетителей изображение не поменяется, пока они не обновят кэш браузера.

Как вариант я вижу при каждой закачке изображения генерить какой-то ключ, хранить его в базе и выводить изображение в html вот так вот
<img src="/images/products/7.jpg?key=sdhsdgsdh">
При следующей закачке ключ поменяется
<img src="/images/products/7.jpg?key=dsfhsdhsa">

Как вариант можно ссылки на изображения хранить в отдельной таблице
Т.е. каждое новое изображение будет закачиваться под новым id и будет меняться его адрес. Но этот вариант не совсем подходит в моей ситуации

Вопрос:
Можно можно как-то, сохраняя старый путь к изображению и не используя дополнительных параметров типа ?key=sdhsdgsdh , каким-то образом сообщать браузеру, что изображение поменялось и нужно подгрузить новое изображение?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Это хреново настроенный кеш, так как сервер по нормальному должен вернуть last-modified и браузер перезапросит измененное изображение.
 

gv0zd

Новичок
Ну как ты понимаешь никто себе не будет настраивать ручками кэш

С такой ситуацией сталкивался ни один раз и ни на одном хостинге. Действительно. нужно посмотреть что отдает сервер в ласт модифиед
 

scorpion-ds

Новичок
Это хреново настроенный кеш, так как сервер по нормальному должен вернуть last-modified и браузер перезапросит измененное изображение.
У меня такая же проблема как у ТС, и действительно в .htaccess у меня прописаны правила кеширования изображений, что бы картинки не грузились каждый раз, я обычно просто давал новое имя обновленном изображению или просто чистил кеш.
Как бы получается борьба за сильное кеширование вызывает побочные действия.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
scorpion-ds
Не надо ничего там прописывать спецом, все должно работать и так.
 

gv0zd

Новичок
Страница на которой выводятся данные картинки генерируется php
Вот какие заголовки приходят от сервера
Cache-Control no-cache, must-revalidate
Connection close
Content-Type text/html; charset=UTF-8
Date Wed, 21 Mar 2012 11:30:19 GMT
Expires Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified Wed, 21 Mar 2012 11:30:19 GMT
Pragma no-cache
Server Apache/2.2.17 (Fedora)
Transfer-Encoding chunked
X-Powered-By PHP/5.3.8
Вот заголовки от первой картинки
Accept-Ranges bytes
Connection close
Content-Length 14013
Content-Type image/jpeg
Date Wed, 21 Mar 2012 11:34:51 GMT
Etag "1a15-36bd-4bbbf2da86180"
Last-Modified Wed, 21 Mar 2012 11:34:46 GMT
Server Apache/2.2.17 (Fedora)
X-Pad avoid browser bug
Вот заголовки после замены картинки
Accept-Ranges bytes
Connection close
Content-Length 12318
Content-Type image/jpeg
Date Wed, 21 Mar 2012 11:35:45 GMT
Etag "1a14-301e-4bbbf30b29440"
Last-Modified Wed, 21 Mar 2012 11:35:37 GMT
Server Apache/2.2.17 (Fedora)
X-Pad avoid browser bug
В данном случае все отработалось нормально, и картинка подменилась
Иногда же этого не происходит, закономерность выловить не удалось :(
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Посмотри на данные файла, изменяются они или нет. Время изменения/создания.
 

A1x

Новичок
все должно работать и так
но бывает что почему-то не работает. я пробовал с этим бороться но задолбался.

поэтому просто сохраняю картинку с новым именем типа /images/products/7_76623462.jpg
и вижу что на многих сайтах так сделано - меняешь картинку - меняется имя
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я не знаю как там в апаче, но в nginx, все с дефолтами рулится весьма нормально у меня. Я тоже как бы картинку заменяю при перегрузке, пишу с другим именем в папку вида d/c/e/0/имяфайла. У меня была трабла с CSS/JS. Но то были мои кривые руки. Вернул дефолтные настройки и все стало на место.
 
Сверху