Как избежать кэширование изображения?

golos81

Новичок
Как избежать кэширование изображения?

Все проделываю на локальной машине.
На динамически создаваемой странице есть POST-форма и изображение. В форме указывается новое изображение, затем проверка формы, все ок. Изображение на странице остается таким же. Если походить по другим страницам сайта (изображение присутствует на всех страницах сайта - это аватар), изображение меняется через 1-3 секунды.

HTTP Analazyer сразу после обработки формы показывает 304 код у картинки, оно понятно почему: заливка картинки происходит до того, как передался заголовок. Через те же 1-3 секунды уже показывает 200, при этом картинка меняется.

В заголовке передаю следующее:
PHP:
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
Есть ощущение, что поможет JS редирект, но не хотелось бы его использовать. Пробовал передавать заголовок через JS, выдавая JS после заливки картинки, не помогло.

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

kruglov

Новичок
golos81
Так, а что кэшировать-то не надо, страницу или что другое?

Правда, если сервер говорит 304, значит, на тот момент, возможно, картинка еще в самом деле не записалась...
 

Ermitazh

Новичок
рискну предположить...kartinka.jpeg?<?=rand(1,1000000)?>, это обычно помогает избежать кэширования в некоторых случаях...
 

kruglov

Новичок
Ermitazh
Это в первую очередь для браузера, а у него сервер 304 говорит. Хотя попытка не пытка.
 

Bitterman

Новичок
Уж лучше тогда kartinka.jpeg?<?=mktime()?>
Но вообще данный вопрос обсуждался уже много раз. Можно было бы и поиском воспользоваться.
 

golos81

Новичок
Автор оригинала: kruglov
golos81
Так, а что кэшировать-то не надо, страницу или что другое?

Правда, если сервер говорит 304, значит, на тот момент, возможно, картинка еще в самом деле не записалась...
1. Кэшировать надо страницу, со всеми изображениями, но, если изображения поменялись, необходимо обновлять их при загрузке.

2. Картинка 100% ЕЩЕ не записалась, так как механизм следующий:
а) передается заголовок
б) происходит загрузка страницы
в) на загружаемой странице обрабатывается форма, в случае ОК, картинка загружается на сервер
г) пользователю выдается сообщение, что картинка обновлена. Фактически в этот момент на сервере лежит новая картинка, но на странице отображается старая. Если ее обновить (перейти по ссылке на другую страницу), то срабатывает expire.

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

Видимо придется менять архитектуру страницы...
 

Bitterman

Новичок
golos81
После обработки формы должен быть редирект на ту же страницу. Позволяет избежать многих проблем, в том числе и твоей.
 

Фанат

oncle terrible
Команда форума
Заголовок-то здесь вообще не при чем.
вообще, все это шаманство с заголовками - костыли.
в нормальной системе все должно работать и так.
 

golos81

Новичок
Автор оригинала: Bitterman
golos81
После обработки формы должен быть редирект на ту же страницу. Позволяет избежать многих проблем, в том числе и твоей.
В общем пока что сделал через redirect, только пришлось поставить паузу в 10млсек, т.к. если меньшем, то сервер не успевает обновлять картинку. Работает, но, в данном случае придется логику формы переделывать: у меня по завершению обработки пользователю выдается сообщение с результатом. При редиректе сообщения либо не будет, либо надо его как-то переносить на редиректиемую страницу, в общем, здесь тоже не все гладко:(
 

Bitterman

Новичок
Пиши в сессию какую-нить хрень, а при загрузке проверяй - если она есть - выдавай сообщение, нет - рисуй форму. Только не забудь после выдачи сообщения удалить сессионную переменную.
либо надо его как-то переносить на редиректиемую страницу
Редиректь на страницу с сообщением, в чем проблема-то?
 

Bitterman

Новичок
*****
В чем конкретно заключается фигня - в том, что можно проще или в том, что нельзя так как я говорю?
 

Фанат

oncle terrible
Команда форума
в том, что сессии тут вообще никаким боком.
совершенно посторонний элемент
 

golos81

Новичок
Автор оригинала: *****
да не нужно ничего. у автора просто глюки.
вот с этого места поподробнее:D

-~{}~ 18.09.07 17:17:

Автор оригинала: Bitterman
Можно в принципе и в GET переменную совать.
Можно и через гет и через сессию, можно хоть куку поставить, только все это лишнее. Мне кажется правильнее будет переделать архитектуру страницы, т.е. производить заливку фото с отдельной страницы, а не со страницы формы, где полная анкета пользователя.
 

dimagolov

Новичок
golos81, если скрипт, что принимает файл переносит его в место постоянного хранения, потом генерит на него ссылку для юзера, потом ее вставляет в код ответа и только потом отсылает ответ юзеру, то с чего вдруг когда этот ответ до юзера дошел и броузер начал грузить картинки ее еще нету там, куда ссылка указывает?
или загрузка делается в новом окошке, а обновить надо в старом? тогда в чем проблема JS из нового окошка сказать родителю "картинка готова, можно обновлять" и тем же JS ее обновить?
 
Сверху