2011-08-10 12 views
1

最近、私のプロジェクトが画像をキャッシュしていることが明らかになりました。これは、ユーザーがブラウザーを閉じて再ロードするまで反映されない新しいイメージをアップロードできるため、問題です(IEでデバッグするときは少なくとも)。私は送信しているデータを非常に増加させるので、変更されていないものについて何度も何度も画像を再ダウンロードする必要はありません。Silverlightでの特定の画像のキャッシュ防止

私は、共通の要因は開始がきれいに表示される変数のことであるように思わカップルソリューションherehere2

を試してみました。しかし、どちらも私のために働いていません。

私は基本的に2つの異なる方法で画像を表示しています。

1)私は、文字列を取ると)<Image />

2のソースにそれを渡し、私はURIに文字列を有効にしてからのソースに渡さ舞台裏でビットマップにそれを回します<Image />

イメージがサーバー側で更新されると、ユーザーのイメージの場所は変わらず、データのみが変更されます。

サーバー側の処理を行っているコーダーも解決策を試行しました。彼はいくつかのキャッシュ防止ヘッダーを実装していると言いました。その結果、画像が更新された後初めて画像が要求されたときには、新しい画像が取得され、表示されます。しかし、画像が表示される他の場所は更新されません。

私の理想的な解決策は、ユーザーが新しいイメージをアップロードすると、その特定のURIを使用している誰かに新しいバージョンを取得するよう通知するものを実装することでしょう。

キャッシュを選択的に停止する方法を知っている人はいますか?

答えて

2

私はあなたが要求している画像のウリにタイムスタンプを付加しようとするだろう、これはブラウザ(または任意のプロキシ)キャッシング

例えばを停止役立つはずですhttp://www.example.com/myimage.jpg?ts=2011081107333454

1

まず、やや曖昧な用語「キャッシング」をクリアします。

私たちは常にあらゆる種類のキャッシュを行います。高価な操作の結果を取得し、その結果を将来の使用のために保存して、高価な操作を繰り返さないようにするたびに、効果的に「キャッシュする」ことができます。 Silverlightを含むすべてのフレームワークもこのようなことをたくさんしています。

しかし、Webベースのアプリケーションのコンテキストで「キャッシュ」という用語を使用し、HTTPを使用して取得したリソースを参照する場合は、特定のHTTPキャッシュ仕様が思い浮かびます。これは不合理ではないHTTPキャッシュは明らかに大きな役割を果たしており、正しい操作のためにはサーバーの権限ヘッダーの設定を重要なものにすることが重要です。

HTTPリソースキャッシングの考え方に欠けていることが多いのは、キャッシュヘッダーを守るための恩恵はHTTPスタック自体にしかないということです。アプリケーションでキャッシュを知ることさえありません。

アプリケーションが、HTTPスタックから要求されたリソースへのURIの独自の「キャッシュ」を維持することを選択した場合、HTTP準拠のキャッシュアルゴリズムを実装する必要はありません。このような「キャッシュ」に、指定されたUriに一致する特定のアプリケーションオブジェクトを提供するように要求された場合、HTTPを参照することなく完全に自由にすることができます。

「サーバーコーダー」が実際にキャッシュヘッダーを正しく設定していると仮定すると、HTTPキャッシュが唯一のキャッシュである場合は、すべてがうまくいくはずです。しかし、依然としてアプリケーションレイヤキャッシュが関与している可能性があります。

uritmatelyロブの提案は、クエリ文字列値でuriを「バージョンアップ」する場合に意味があります。しかし、キャッシングを防ぐことではなく、アプリケーションとhttpレベルの両方でキャッシングすることは良いことです。完全なUriによって参照されるリソースが常に望ましいコンテンツであることを保証することです。

関連する問題