0

画像 (または CSS、JS など) を FTP に送信すると、アップロードされない (またはキャッシュされる) ことがあるのはなぜですか?

#container {
    background: url("../images/bg.jpg") no-repeat scroll 0 0 transparent;
    height: 895px;
    overflow: hidden;
}

でも//( ../images//bg.jpg) で、新しい画像を見ることができます

#container {
    background: url("../images//bg.jpg") no-repeat scroll 0 0 transparent;
    height: 895px;
    overflow: hidden;
}
4

1 に答える 1

1

ファイルはアップロードされているようですが、ブラウザによってキャッシュされています。

Firefox/IEでCTRL+F5を使用してリロードしてみてください(他のブラウザではショートカットが異なる場合があります)。常に新しいファイルが表示されます。

リソース(JS、CSS、および画像ファイル)は、ブラウザーによって何らかの形でより積極的にキャッシュされます。HTMLページの場合、通常、更新するたびに新しいHTTPリクエストがありますが、リソースの場合、HTTPリクエストがまったく生成されない場合があります。たとえば、Firebugのネットパネルを見るとわかります。

キャッシングは一般的に非常にトリッキーなトピックであり、サーバーとブラウザーの設定と実装に大きく依存します。

ブラウザのキャッシュは、通常、完全なURLマッチングを介して実装されます。つまり、http://someserver/bg.jpghttp://someserver//bg.jpgまったく異なる2つのURLです。ただし、多くのHTTPサーバーは、同じコンテンツを要求したと見なし、サーバーのルートフォルダーに保存されているbg.jpgファイルのコンテンツを送信します(URLとこのURLにリンクされているコンテンツの違いを確認する必要があります)。

最初のURLにアクセスした場合、それはブラウザによってキャッシュされます。次に、新しいバージョンの画像をアップロードした後、キャッシュのブラウザ実装と、「bg.jpg」を初めてダウンロードしたときに送信されたサーバーのキャッシュ設定に大きく依存します。たとえば、画像とともにHTTP応答ヘッダーで送信されるサーバー設定は、次の1時間の間、画像がブラウザによってキャッシュされ、サーバーに問い合わせることなくキャッシュから直接読み込まれる可能性があります(サーバー設定は不要なトラフィックを回避するようにそのように構成します)。

ファイルの「新しい」バージョンを常に取得する(少しハッキーですが、非常に頻繁に使用される)方法は、現在のタイムスタンプをリクエストに追加することです(ただし、通常はサーバー側の生成またはJavaScriptスクリプトに制限されます)- CSSではあまり意味がありません。

したがって、私がそれを書いているとき、スクリプトはサーバーに要求します http://someserver/bg.jpg?1334442703 が、数秒後にページを更新すると、次のようになります。 http://someserver/bg.jpg?1334442711

ほとんどのサーバーはクエリ文字列(「?」の後の文字列)を破棄し、bg.jpg両方のクエリで同じファイルの内容を返すだけですが、画像のURLが異なるため、どのブラウザもキャッシュから画像を読み取る必要はありません。

于 2012-04-14T21:34:07.037 に答える