6

Firefox (少なくとも v3) と Safari は、css ファイルから参照された画像を適切にキャッシュしないことがわかりました。画像はキャッシュされますが、サーバーで変更しても更新されません。Firefox がキャッシュに画像を保存すると、画像が変更されたかどうかを確認することはありません。

css ファイルは次のようになります。

div#news {
  background: #FFFFFF url(images/newsitem_background.jpg) no-repeat;
  ...
}

問題は、ここで newsitem_background.jpg 画像を変更すると、明示的にページを更新しない限り、すべての Firefox ユーザーが古い画像を引き続き取得することです。一方、IE は画像が変更されたことを検出し、自動的に再読み込みします。

これは既知の問題ですか? 回避策はありますか?ありがとう!

編集: 解決策は F5 を押さないことです。私がすることができます。しかし、私たちのクライアントは、私たちの Web サイトにアクセスするだけで、古くて時代遅れのグラフィックを入手するだけです。F5 キーを押す必要があることをどのように知るのでしょうか?

Firebug をインストールして、すでに疑っていたことを確認しました。Firefox は、CSS ファイルから参照されている画像を取得して、変更されているかどうかを確認しようとさえしません。F5 を押すと、すべての画像がチェックされ、Web サーバーは適切に 304 で応答します。ただし、変更されたものを除き、200 OK で応答します。

では、 CSS ファイルから参照されている画像をFirefox に自動的に更新させる方法はありますか? きっと私だけがこの問題を抱えているのではありませんか?

EDIT2:これをローカルホストでテストしましたが、画像の応答にはキャッシュ情報が含まれていません。次のとおりです。

Server  Microsoft-IIS/5.1
X-Powered-By    ASP.NET
Date    Tue, 14 Oct 2008 11:01:27 GMT
Content-Type    image/jpeg
Accept-Ranges   bytes
Last-Modified   Tue, 14 Oct 2008 11:00:43 GMT
Etag    "7ab3aa1aec2dc91:9f4"
Content-Length  61196

EDIT3:さらに読んだところ、修正できないように見えます。Firefoxまたはほとんどのブラウザは、画像が頻繁に変更されないと想定しているためです(ヘッダーとすべてが期限切れになります)。

4

7 に答える 7

8

画像の URL にクエリ文字列の値を追加するだけです。通常、「バージョン番号」を作成し、画像が変更されるたびにインクリメントします。

div#news {
  background: url(images/newsitem_background.jpg?v=00001) no-repeat;
  ...
}
于 2008-10-14T12:25:50.020 に答える
2

このような問題を回避するために、Web マスターがファイルにバージョン番号を追加しているのを見てきました。そのため、ロードsite-look-124.cssしてnewsitem_background-7.jpg.

悪い解決策ではありません、IMHO。

于 2008-10-14T12:02:18.163 に答える
1

提供する画像の HTTP ヘッダーと CSS ファイルを確認します。

それらのいずれかがキャッシュに設定されている (または見つからない) 場合、ブラウザーがファイルを正しくキャッシュしていることがわかります。

于 2008-10-14T10:04:36.670 に答える
0

これは、Firefoxが画像の有効期限が切れているかどうかをチェックしないという問題を修正しませんが、クライアントに正しい画像が表示されるようにするためにできることは次のとおりです。

cssの画像を、画像を返すPHPまたは同様のスクリプトに設定します。

div#news {
  background: #FFFFFF url(images/background.php?name=newsitem) no-repeat;
  ...
}

次に、スクリプトを使用して画像を返します。」

<?php
$name = isset($_REQUEST['name']) ? $_REQUEST['name'] : false;
switch($name) {
    case 'newsitem':
        $filename = 'news_item_background.jpg';
    break;
    default:
        $filename = 'common_background.jpg';
    break;
}

header("Content-Type: image/jpeg");
header("Content-Transfer-Encoding: binary");
$fp = fopen($filename , "r");
if ($fp) fpassthru($fp);

ホームサーバーでそれを使用して、一部のページの背景画像をランダムに返しますが、Firefoxはこれらをキャッシュしていないようです。必要に応じて、画像を使ってファンキーな愚痴を言うこともできます。

于 2008-10-14T12:22:16.050 に答える
0

もう1つの簡単な回避策(これが主にWebデザインの途中で発生する場合)は、Firefoxで実際のCSSページを表示し、ページをリロードします。その後、Webサイトに戻ると、ブラウザーは現在のCSSページを読み取ります。

もちろん、これはWebデザイナーのための一時的な修正です

于 2009-08-25T14:08:25.340 に答える
0

SHIFT キーを押しながらリロードをクリックしてみてください (または を押しますF5)。

それ以外の場合は、Firebug などのツールを使用して HTTP 要求/応答ヘッダーを確認し、キャッシュを制御するヘッダー値を観察します。この問題に気づいたことはありません。サーバーが 304 応答を返している可能性があります (変更されていません)。

于 2008-10-14T09:19:29.430 に答える
0

これはおそらくあなたが聞きたいことではないことはわかっていますが、Firefox が標準に従っており、IE が少し奇妙なことをしている可能性がかなり高いです (そして、たまたまそれに依存しているだけです ;))。

キャッシュの動作は、画像と共に送信されるキャッシュ ヘッダーによって異なります。ヘッダー (または画像の 1 つへの URL) を投稿できる場合は、何が起こっているかをより具体的に伝えることができます。

于 2008-10-14T09:23:27.440 に答える