2012-09-08 52 views
2

我的問題是簡短的(希望解決方法很簡單!):如何在我的web服務中完全禁用瀏覽器緩存,使用vaadin實現?如何在Vaadin中禁用瀏覽器緩存

我想徹底禁用緩存,因爲我在嘗試執行某些PDF流式傳輸並將其顯示在瀏覽器中時遇到了問題。

我看了一下我的問題的解決方案,例如在這裏:

Using <meta> tags to turn off caching in all browsers?

他們談論增加了一些頭到禁用瀏覽器緩存的Web應用程序。但是,如何將它們添加到我的Vaadin應用程序中?

短的代碼段會很歡迎(和樂於助人!)

再次感謝每一個答案,以爲你跟我分享。

回答

3

在我看來,你想在下載PDF文件時禁用緩存。假設您正在使用DownloadStream來傳輸內容,則應如下設置Content-DispositionCache-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 Servlet Filter來爲響應添加適當的參數,而不必修改您的應用程序。你可以這樣寫自己 - 應該是快易 - 雖然快速搜索發現Apache2的許可緩存過濾器:http://code.google.com/p/cache-filter/wiki/NoCacheFilter

我沒有用緩存過濾器,但一個快速脫脂表明,它會工作得很好,你。