如何在Vaadin中禁用浏览器缓存

时间:2012-09-08 15:22:20

标签: caching pdf http-headers vaadin browser-cache

我的问题很简短(希望很容易解决!):如何在使用vaadin 实现的网络服务中完全禁用浏览器缓存?

我想完全禁用缓存,因为当我尝试做一些PDF流媒体并在浏览器中显示它们时,我遇到了问题。

我已经阅读了有关我的问题的解决方案,例如:

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

他们谈论向禁用浏览器缓存的Web应用程序添加一些标头。但是如何将它们添加到我的 Vaadin 应用程序中?

一个简短的代码片段将非常受欢迎(并且非常有用!)

再次感谢您的回答,并认为您与我分享。

1 个答案:

答案 0 :(得分:5)

在我看来,您想要在下载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过滤器将相应的参数添加到响应中,而不必修改您的应用程序。您可以自己编写 - 快速简单 - 虽然快速搜索找到Apache2许可的缓存过滤器:http://code.google.com/p/cache-filter/wiki/NoCacheFilter

我没有使用过Cache-Filter,但快速浏览表明它对您来说效果很好。