Фон
Я пишу та використовую дуже простий інструмент управління контентом на основі 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 також зміниться. Однак для цього потрібні багато змін на всьому сайті, і я скоріше цього не роблю, якщо в мене є краще рішення. Крім того, це все одно не буде працювати, якщо нове завантажене зображення має те саме ім’я (скажімо, зображення трохи сфотографоване та повторно завантажене).