任何可靠的方法来阻止Internet Explorer(v7,8)停止缓存PDF文件?

时间:2010-06-28 17:12:29

标签: pdf caching internet-explorer

我工作的应用程序生成PDF文档并在浏览器窗口中呈现它们。文档中的某些数据可以被认为是敏感的,因此我们正在探索如何防止浏览器缓存文档内容。我们使用以下Java代码来阻止Firefox中的缓存,但在IE 8中不起作用:

response.setHeader("Expires", "0");
response.setHeader("Pragma", "private");
response.setHeader("Cache-Control", "max-age=0, no-store");
response.setHeader("Content-disposition", "inline; filename= \"" + filename + "\"");
response.setContentLength(fbytes.length);

我想知道是否有人操纵标头以阻止IE缓存?提前谢谢。

3 个答案:

答案 0 :(得分:3)

当您说“缓存”时,您的意思是“将文档写入磁盘”?

不,没有好办法,因为Adobe PDF阅读器依赖缓存文件来显示文档。

通常,在HTTPS文档中指定“no-store”会阻止它在IE中完全下载,如下所述:http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx但是由于此文档由Adobe MIME处理程序处理,因此您似乎不会遇到这个问题。

真正的问题是“你的威胁模型是什么?”能够读取用户TIF的坏人通常能够做其他不良事(例如安装恶意软件),因此试图将文档保留在磁盘上是一项相当徒劳的工作。这尤其正确,因为现代操作系统使用虚拟内存(将内存页面写入交换文件中的硬盘),这意味着具有不受限制的读取硬盘能力的坏人无论如何都可以恢复内存内容。

答案 1 :(得分:0)

将安全分开,因为内部网中存在链接。如何处理IE6 / IE8。

response.setHeader("Expires", "0");
response.setHeader("Pragma", "private");
response.setHeader("Cache-Control", "max-age=0, no-store");
response.setHeader("Content-disposition", "inline; filename= \"" + filename + "\"");
response.setContentLength(fbytes.length);

这段代码不起作用。

答案 2 :(得分:0)

我发现的唯一可靠方法是使用唯一的命令行参数引用pdf。我们使用guids(如果在SQL中你可以从中获取它:SELECT newid())。只需修改请求的页面即可 pdf,如果这是一个链接,请考虑执行以下操作: 句法: <a href="{PDFfilename}?guid={UniqueID}">link</a>

实施例: <a href="mypdf.pdf?guid=FA7848FB-414E-4C17-95E8-1921B333E1A0">Link</a>

这将要求您在每次修改pdf时重新生成请求页面。