6

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

我想完全禁用缓存,因为当我尝试进行一些 PDF 流式传输并在我的浏览器中显示它们时遇到问题。

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

使用 <meta> 标签关闭所有浏览器中的缓存?

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

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

再次感谢您的每一个答案,并认为您正在与我分享。

4

1 回答 1

5

在我看来,您想在下载 PDF 文件时禁用缓存。假设您正在使用 aDownloadStream来流式传输内容,那么按如下方式设置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 许可的 Cache-Filter :http ://code.google.com/p/cache-filter/wiki/NoCacheFilter

我没有使用过 Cache-Filter,但快速浏览一下它就可以很好地为您工作。

于 2012-09-10T09:51:38.580 回答