我试图找到一种方法来阻止浏览器缓存使用流媒体方法加载的PDF。
FireFox和Chorme使用以下标题处理得很好,并且不会缓存任何pdf文件:
Response.AddHeader(“Pragma”,“no-cache,no-store”); Response.AddHeader(“Cache-Control”,“no-cache,no-store,must-revalidate,max-age = 0”); Response.AddHeader(“Expires”,“ - 1”);
虽然IE 7(使用acrobat reader 9.4.1)仅适用于以下标题并阻止PDF文档的缓存:
Response.AddHeader(“Pragma”,“no-cache,no-store”); Response.AddHeader(“Cache-Control”,“private,must-revalidate,max-age = 0”); Response.AddHeader(“Expires”,“ - 1”);
当我尝试在Acrobat Reader 10中使用IE 7时,无论我尝试过什么,上面的标题都没有任何不同并缓存PDF。
当我尝试放置Cache-Control:no-cache,no-store时,根本没有加载pdf。 根据我的理解,IE使用缓存机制来加载PDF文档。
是否有人熟悉全局或特定方式(例如使用其他标题)可以帮助防止缓存PDF文档?
答案 0 :(得分:7)
在路径或查询字符串中为URL添加随机数。这样,它每次都会下载文件。如果文件已更改,您也可以仅更改数字,例如使用文件的mtime。
PHP(因为每个人都明白,即使没有人喜欢它):
<a href="document.pdf?buster=<?= time() ?>">Download PDF</a>
答案 1 :(得分:1)
显示使用no-cache标头内联的PDF(和其他文档类型)的问题已作为错误提交给Microsoft:http://support.microsoft.com/kb/316431。 IE在内联读取PDF时使用自己的缓存机制。
不幸的是,M $的人说这“按设计工作”,用户不应该使用no-cache标头......去图。
您可以尝试VSU使用Java PDF阅读器的想法......我也可以采用这种方式。
答案 2 :(得分:0)
控制管道中的缓存设置并非万无一失。另一种方法是在PDF的文件名中对实时和日期进行编码。
答案 3 :(得分:0)
您可以将时间日期编码为PDF的文件名,以便每次发出请求时文件名都是唯一的。
Response.AddHeader "Content-Disposition","attachment;filename=somename" + CurrentDate() + Currenttime() ".pdf"
CurrentDate adn CurrentTime是虚函数。你需要编写那段代码。