Фон
Я пишу и использую очень простой инструмент управления контентом на основе CGI (Perl) для двух бесплатных веб-сайтов. Он предоставляет администратору веб-сайта HTML-формы для событий, где они заполняют поля (дата, место, заголовок, описание, ссылки и т. Д.) И сохраняют их. В этой форме я разрешаю администратору загрузить изображение, связанное с событием. На странице HTML, отображающей форму, я также показываю предварительный просмотр загруженного изображения (тег HTML img).
Проблема
Проблема возникает, когда администратор хочет изменить изображение. Ему просто нужно нажать кнопку «Обзор», выбрать новое изображение и нажать «ОК». И это отлично работает.
Как только изображение загружено, мой внутренний CGI обрабатывает загрузку и корректно перезагружает форму.
Проблема в том, что показанное изображение не не обновляется. Старое изображение все еще отображается, хотя база данных содержит правильное изображение. Я сузил это до факта, что ИЗОБРАЖЕНИЕ КЕШИТСЯ в веб-браузере Если администратор нажимает кнопку «RELOAD» в Firefox / Explorer / Safari, все обновляется нормально, а новое изображение просто появляется.
Мое решение - не работает
Я пытаюсь управлять кешем, написав инструкцию HTTP Expires с датой очень далекой в прошлом.
Expires: Mon, 15 Sep 2003 1:00:00 GMT
Помните, что я на административной стороне, и мне все равно, загружаются ли страницы немного дольше, потому что они всегда просрочены.
Но это тоже не работает.
Примечания
При загрузке изображения его имя не сохраняется в базе данных. Он переименован в Image.jpg (чтобы просто использовать его). При замене существующего изображения новым, имя также не меняется. Изменяется только содержимое файла изображения.
Веб-сервер предоставляется услугой хостинга / ISP. Использует Apache.
Вопрос
Есть ли способ заставить веб-браузер НЕ кэшировать вещи с этой страницы, даже изображения?
Я жонглирую опцией "сохранить имя файла" в базе данных. Таким образом, если изображение будет изменено, src тега IMG также изменится. Однако это требует много изменений по всему сайту, и я бы не стал этого делать, если у меня есть лучшее решение. Кроме того, это по-прежнему не будет работать, если новое загруженное изображение имеет то же имя (скажем, изображение немного фотофотошоплено и повторно загружено).