Firefoxのキャッシュ 再考
Firefoxのキャッシュの件ですが、近からず、遠からず、微妙にはずしたくさいので、問題のプログラムを即行ででっちあげて、改めて徹底調査。 おかげさまで「2回のリクエスト」も再現しました。 事情はかなり複雑です。 先にまとめてしまいましょう。
- ブラウザのキャッシュが有効、レスポンスのキャッシュが有効
- 1回のアクセスで1回のリクエスト。
- ブラウザのキャッシュが有効、レスポンスのキャッシュが無効
- 1回のアクセスで2回のリクエスト。 1回目は画像本体とタブのアイコン作成のリクエスト。 2回目はアドレスバーのアイコン作成のリクエスト。
- ブラウザのキャッシュが無効
- 1回のアクセスで3回のリクエスト。 1回目は画像本体のリクエスト。 2回目はタブのアイコン作成のリクエスト。 3回目はアドレスバーのアイコン作成のリクエスト。
タブの表示状態が関係ありそうな旨を書きましたが、これは大ハズレ。 レスポンスのキャッシュ制御が絡んでいるようで、タブの状態は無関係でした。 というわけで、普通ならこれでおしまいですが、本業は“こちら”なので、ついでに解決してしまいましょうか。
ゆるゆる~っと、要件をまとめると、
- 特定のURLをキックするたびに数種類の画像をスライド式に表示してして~
- IEの頑固なキャッシュが同じ画像を表示し続けてイヤイヤ~ン
- Firefoxの2回のリクエストがカウンタを狂わせてこまったこ~まった
普通に作るとどっち付かずなわけですねぇ。 両者とも特殊なので『Safari』と『Opera』では問題なしという前提で(汗) ちなみに、ウチの会社の場合はIEが無視されますね(爆)
キャッシュが有効だとIEが頑固で、キャッシュが無効だとFirefoxが挙動不審、っと。 う~んと、え~と。 間を取って「ちょっとだけキャッシュする」というのはどうでしょう。 簡単な話です。 キャッシュを無効にするのはやめて、代わりに、Expiresヘッダに+1分以下(たぶん+10秒でも大丈夫)の時刻を設定してあげるのです。
試したところ、見事、Firefoxでは本体画像とアイコンが一致、かつ、順番どおりにスライド。 IEでは最も頑固なキャッシュの設定でも、(例えば)1分を過ぎれば次の画像が表示されました。
ちなみに、Firefox自体のキャッシュを無効にしてURLをキックすると、見事、画像本体、タブのアイコン、アドレスバーのアイコンはバラバラ。 やはり「3回のリクエスト」はそういう内訳でしたか。 面白い。 あと、解決前のプログラムでタブを行ったり来たりすると、アドレスバーのアイコンが・・・
軽い勉強にはなりましたが、残念ながら、あまり役には立ちませんねぇ(苦笑) というわけで、なんとかしてよ、モジラえも~ん!!