我的问题很简短(希望很容易解决!):如何在使用vaadin 实现的网络服务中完全禁用浏览器缓存?
我想完全禁用缓存,因为当我尝试做一些PDF流媒体并在浏览器中显示它们时,我遇到了问题。
我已经阅读了有关我的问题的解决方案,例如:
Using <meta> tags to turn off caching in all browsers?
他们谈论向禁用浏览器缓存的Web应用程序添加一些标头。但是如何将它们添加到我的 Vaadin 应用程序中?
一个简短的代码片段将非常受欢迎(并且非常有用!)
再次感谢您的回答,并认为您与我分享。
答案 0 :(得分: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 Servlet过滤器将相应的参数添加到响应中,而不必修改您的应用程序。您可以自己编写 - 快速简单 - 虽然快速搜索找到Apache2许可的缓存过滤器:http://code.google.com/p/cache-filter/wiki/NoCacheFilter
我没有使用过Cache-Filter,但快速浏览表明它对您来说效果很好。