バックグラウンド
私は、2 つのプロボノ Web サイト用に、非常に単純な CGI ベース (Perl) のコンテンツ管理ツールを作成して使用しています。Web サイトの管理者にイベント用の HTML フォームを提供し、フィールド (日付、場所、タイトル、説明、リンクなど) を入力して保存します。そのフォームで、管理者がイベントに関連する画像をアップロードできるようにします。フォームを表示している HTML ページでは、アップロードされた画像のプレビューも表示しています (HTML img タグ)。
問題
問題は、管理者が画像を変更したい場合に発生します。彼は「参照」ボタンを押して新しい写真を選び、OK を押すだけでした。そして、これはうまくいきます。
画像がアップロードされると、バックエンドの CGI がアップロードを処理し、フォームを適切にリロードします。
問題は、表示されている画像が更新されないことです。データベースに正しい画像が保持されていても、古い画像が引き続き表示されます。イメージが Web ブラウザーにキャッシュされているという事実に絞り込みました。管理者が Firefox/Explorer/Safari で RELOAD ボタンを押すと、すべてが正常に更新され、新しい画像が表示されます。
私の解決策 - 機能しない
非常に過去の日付で HTTP Expires 命令を記述して、キャッシュを制御しようとしています。
Expires: Mon, 15 Sep 2003 1:00:00 GMT
私は管理者側にいることを思い出してください。ページは常に期限切れになっているため、ページの読み込みに少し時間がかかるかどうかはあまり気にしません.
しかし、これもうまくいきません。
ノート
画像をアップロードするとき、そのファイル名はデータベースに保持されません。これは、Image.jpg という名前に変更されます(使用時に単純化するため)。既存の画像を新しいものに置き換える場合、名前も変更されません。画像ファイルの内容が変わるだけです。
Web サーバーは、ホスティング サービス/ISP によって提供されます。アパッチを使用しています。
質問
Web ブラウザに、このページの内容 (画像でさえも) を強制的にキャッシュさせないようにする方法はありますか?
データベースで実際に「ファイル名を保存する」オプションを調整しています。このように、画像が変更されると、IMG タグの src も変更されます。ただし、これにはサイト全体で多くの変更が必要であり、より良い解決策がある場合は変更しません。また、アップロードされた新しい画像が同じ名前の場合、これはまだ機能しません (画像が少しフォトショップされて再アップロードされたとします)。