バックグラウンド
私は2つの無料ウェブサイト用の非常にシンプルな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に名前が変更されます(使用するときに単にわかりやすくするため)。既存の画像を新しい画像に置き換える場合、名前も変更されません。画像ファイルの内容のみが変更されます。
ウェブサーバーはホスティングサービス/ ISPによって提供されます。Apacheを使用します。
質問
画像ではなく、このページの内容をキャッシュしないようにWebブラウザに強制する方法はありますか?
実際にデータベースに「ファイル名を保存する」オプションを調整しています。このように、画像が変更されると、IMGタグのsrcも変更されます。ただし、これにはサイト全体に多くの変更が必要であり、より良い解決策がある場合は、むしろ変更を行いません。また、アップロードされた新しい画像に同じ名前が付いている場合、これは機能しません(たとえば、画像が少しフォトショップされて再アップロードされたとします)。