1

ブラウザにサーバーから新しいバージョンのファイル (画像) を強制的にプルさせる方法 (サーバーまたはクライアント側) はありますか? それ以外の場合、問題の画像は長期間キャッシュされます。たとえば、画像の URL に乱数を追加できることはわかっていますが、この状況ではこれは受け入れられません。まったく同じURLから画像を更新する必要があります。

私がやっていること: ユーザーが動画をアップロードする YouTube のようなポータル。各ビデオには、ポータルのさまざまなページに表示されるサムネイルがあります。ユーザーはいつでもサムネイルを変更できます (生成された 3 つのサムネイルから選択できます)。したがって、これが発生した場合(新しい画像が「元の」画像を上書きする)、所有者(他のユーザーが古いサムネイルを見るかどうかは気にしない)が新しいサムネイルを見ることができるように、ビデオのサムネイルを更新したくありませんサムネイルが表示される場所。

無理だと思いますが、念のためここで質問させてください。

更新: サーバー側で nginx と PHP を使用しています

4

2 に答える 2

4

サムネイルにETAGを使用できます。これにより、実際のサムネイル データが変更されていない場合 (つまり、同じハッシュが残っている場合)、実際のサムネイル データの送信が妨げられます。ただし、ETAG が変更されたかどうかを確認するためにクライアントの HTTP 要求に直面することになります (通常は HTTP 304 によって応答されます)。

ただし、かなり短い鮮度のしきい値 (数分など) と組み合わせると、リソースを節約しながら、キャッシュと鮮度のトレードオフを実現できます。絶対的な鮮度が必要な場合は、ETAG に固執する必要があるかもしれません。巧妙なハッシュ関数を作成すると、フロントエンド ロードバランサー (または少なくともその近く) で ETAG リクエストを処理できるため、かなり安価になる可能性があります。

編集:私の他のコメントから代替案を追加してください。

別の回答で提案されているように、リソースが変更されたときに、追加されたリクエストパラメーターを使用して強制的に再フェッチすることもできます。そのスキーマのバリエーション (多くの Rails アプリケーションで使用されます) は、ファイルが実際に変更された場合にのみ変更されるパラメーターとして、最後の変更のタイムスタンプ (またはある種のハッシュ) をファイルに追加することです。このようなもの、または上記の方法の 1 つが、実際には、常に最新のリソースを保持しながら、不要なキャッシュ検証要求を確実に行わないようにする唯一の方法です。

于 2011-02-17T11:37:03.393 に答える
0

ファイル名の最後に次のような get パラメータを追加します。

example.jpg?refresh=yesplease

rand() パラメータを使用して、訪問ごとにその画像を更新することもできます。PHPで:

example.jpg?refresh=<?php echo rand(1,999); ?>
于 2011-02-17T11:26:21.847 に答える