• ベストアンサー

キャッシュの制御について

画像を頻繁に更新するサイトを持っているのですが、 運営が長くなるうちに、更新したはずの新しい画像が見えずに、古い画像が表示されているという質問が多くなってきました。 質問をくれた人には、ブラウザの設定方法を教えて、キャッシュの確認をするようにしてもらっているのですが、もっと根本的な解決方法はないでしょうか? METAタグでのキャッシュ無効化、有効期限の指定はできればしたくありません。(更新が不定期なので、有効期限を決めにくい、画像サイズが大きいので、キャッシュを完全に無効にしたくない) 裏技的な物も含めて、何か有効な解決策があれば教えて頂けますか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#30871
noname#30871
回答No.2

>キャッシュから読み込まないということなんでしょうか?  そのとおりです。  URLの「?」以降の部分は、付加情報(正しい名称は知らないです)をあらわします。たとえばこのページのURLでは「?q=345977」の部分です。  CGIなどではこの付加情報を解釈して、たとえば「質問番号345977の内容を送信する」という動作をします。  しかし画像にどんな付加情報を付けても、サーバーには無視されます。ランダムで無意味な付加情報でも、単に無視されるだけです。  一方ブラウザの側では、付加情報の値が違えば違うURLだと律儀に解釈しますから、それぞれ別々にキャッシュされます。  下記のソースではJavaScriptが画像の付加情報をランダムに作ります。この値が偶然一致しない限り、ブラウザのキャッシュ内の画像は呼び出されません。サーバーに画像が再び要求されます。

khaki
質問者

お礼

いろいろ教えて頂きありがとうございます。#3の方のおっしゃっていることも含めて、依然キャッシュについては謎が多いので、少し自分で調べて、それでも分からなかったら再度質問を投稿させて頂こうと思います。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • weio
  • ベストアンサー率32% (23/71)
回答No.3

#1さんの方法は興味深く読ませていただいたのですが、 このケースでは簡単に(例)"??????0001.jpg"(??????はファイル名、0001はバージョン番号)のようにしておいて 更新したら"??????0002.jpg"のようにすれば全体として違うファイル名なのですから古い画像のキャッシュは読み込まれないように思います。

khaki
質問者

お礼

コメントありがとうございます。実際、画像だけでなくテキストの内容も変更してアップロードしても、キャッシュの問題が起きるときは起きてしまうので、htmlの内容が変わっていれば完璧というわけではなさそうな気がしています。少し自分で調べてみて、それでも分からなかったらまた質問を投稿してみようと思います。

すると、全ての回答が全文表示されます。
noname#30871
noname#30871
回答No.1

 JavaScriptを使って、画像のURLにランダムで無意味な文字列を加えればキャッシュされなくなる……と考えて、以下のように書いてみました。  <html> <head> <script language="JavaScript"> <!-- function img(url, width, height, alt) { url = url + '?anticache=' + Math.random(); document.write('<img src="' + url + '"'); document.write(' width="' + width + '"'); document.write(' height="' + height + '"'); document.writeln(' alt="' + alt + '">'); } // --> </script> </head> <body> Reloadしてみて! <script language="JavaScript"> <!-- img('http://www.canon.co.jp/Imaging/D60/SAMP/CRW_2011_JFR.jpg', 2048, 1360, 'キャッシュされない画像だよ'); // --> </script> <noscript> <img src="http://www.canon.co.jp/Imaging/D60/SAMP/CRW_2011_JFR.jpg" width="2048" height="1360" alt="キャッシュされる画像だよ"> </noscript> </body> </html>

khaki
質問者

補足

早速の回答ありがとうございます。確かにキャッシュされなくなるみたいです。これは、htmlのソースが(画像に関係しないところでも)変わっていれば、(htmlを)キャッシュから読み込まないと言うことなんですか?それとも、URLが違う画像は、(画像を)キャッシュから読み込まないということなんでしょうか?しくみを少し解説して頂けると助かります。また、ファイル名に無意味な文字列を加えていいのはなぜですか?

すると、全ての回答が全文表示されます。

関連するQ&A