6

私の質問は短いです (うまくいけば簡単に解決できます!): vaadin で実現された Web サービスでブラウザのキャッシュを完全に無効にするにはどうすればよいですか?

PDF ストリーミングを実行してブラウザに表示しようとすると問題が発生するため、キャッシュを完全に無効にしたいと考えています。

たとえば、ここで私の問題の解決策について読みました:

<meta> タグを使用して、すべてのブラウザーでキャッシュをオフにしますか?

彼らは、ブラウザーのキャッシュを無効にするヘッダーを Web アプリケーションに追加することについて話しています。しかし、それらをVaadinアプリケーションに追加するにはどうすればよいでしょうか?

短いコード スニペットは大歓迎です (そして役に立ちます!)。

すべての回答と、あなたが私と共有していると思ってくれたことにもう一度感謝します。

4

1 に答える 1

5

PDFファイルをダウンロードするときにキャッシュを無効にしたいようです。DownloadStreamコンテンツをストリーミングするためにを使用していると仮定すると、Content-DispositionおよびCache-Controlヘッダーを次のように設定するとうまくいくはずです。

 DownloadStream stream = new DownloadStream(getStreamSource().getStream(), contentType, filename);
stream.setParameter("Content-Disposition", "attachment;filename=" + filename);
// This magic incantation should prevent anyone from caching the data
stream.setParameter("Cache-Control", "private,no-cache,no-store");    
// In theory <=0 disables caching. In practice Chrome, Safari (and, apparently, IE) all ignore <=0. Set to 1s 
stream.setCacheTime(1000);

すべてのVaadin リクエストのキャッシュを無効にしたい場合は、AbstractApplicationServlet のソースを調べて、 などのメソッドを拡張する#serveStaticResourcesInVAADIN必要があります。これらの多くはプライベート メソッドであるため、これは非常に難しい作業です。

より簡単な方法は、アプリをまったく変更せずに、Http サーブレット フィルターを使用して適切なパラメーターを応答に追加することです。あなたはこれを自分で書くことができます - 簡単なはずです - クイック検索は Apache2 ライセンスの Cache-Filter を見つけます: http://code.google.com/p/cache-filter/wiki/NoCacheFilter

私は Cache-Filter を使用したことはありませんが、簡単に調べてみると、うまく機能することがわかります。

于 2012-09-10T09:51:38.580 に答える