【问题标题】:How to Prevent Caching When using PDF Streaming with Acrobar Reader 10.0 (HTTP1.0/HTTP1.1)将 PDF 流与 Acrobat Reader 10.0 (HTTP 1.0/HTTP 1.1) 一起使用时如何防止缓存
【发布时间】:2011-06-11 02:36:42
【问题描述】:

我试图找到一种方法来防止浏览器缓存正在使用流媒体方法加载的 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");

当我尝试将 IE 7 与 Acrobat Reader 10 一起使用时,上面的标题没有任何不同,并且无论我尝试什么都缓存了 PDF。

当我尝试放置 Cache-Control: no-cache, no-store 时,根本没有加载 pdf。 据我了解,IE使用缓存机制加载PDF文档。

是否有人熟悉可以帮助防止缓存 PDF 文档的全局或特定方式(例如通过使用其他标题)?

【问题讨论】:

    标签: caching pdf header acrobat


    【解决方案1】:

    在路径或查询字符串中向 URL 添加一个随机数。这样,它每次都会下载文件。如果文件已更改,您也可以仅更改数字,例如使用文件的 mtime。

    PHP(因为每个人都明白这一点,即使没有人喜欢它):

     <a href="document.pdf?buster=<?= time() ?>">Download PDF</a>
    

    【讨论】:

    • 对于此类问题,这绝对是一个优雅的解决方法。
    • 如果服务器上的 pdf 名称中有空格,这将不起作用。
    【解决方案2】:

    在使用 no-cache 标头的同时显示 PDF(和其他文档类型)的问题已作为错误提交给 Microsoft:http://support.microsoft.com/kb/316431。内联阅读 PDF 时,IE 使用自己的缓存机制。

    不幸的是,M$ 的人说这“按设计工作”,用户不应该使用 no-cache 标头...看图。

    您可以尝试 VSU 使用 Java PDF 阅读器的想法...我也可以走这条路。

    【讨论】:

      【解决方案3】:

      控制缓存设置并不是万无一失的。另一种方法是在 PDF 的文件名中编码实时和日期。

      【讨论】:

        【解决方案4】:

        您可以将时间日期编码到 PDF 的文件名中,以便每次发出请求时文件名都是唯一的。

        Response.AddHeader "Content-Disposition","attachment;filename=somename" + CurrentDate() + Currenttime() ".pdf"

        CurrentDate 和 CurrentTime 是虚函数。您需要编写该代码。

        【讨论】:

        • 通过发送此标头,浏览器要求我下载文件。当我尝试放置“内联”而不是“附件”时,它仍然被保存到缓存中。关于如何在不缓存的情况下流式传输 pdf 文档的任何建议?
        • 我认为您不希望 PDF 文档被缓存的原因是为了确保每次都生成一个新的 PDF。现在,我意识到您想阻止它存储在客户端中。好吧,您可以创建一个 Java 小程序来下载 PDF 并显示它,并在用户完成后将其删除。服务器可以对其进行加密,而小程序可以进行解密以提高安全性。这是我们的 Java PDF 查看器的示例,它可以在网页中显示 PDF gnostice.com/…
        • 您好,感谢您的回复。我正在寻找不包含任何第三方或外部代码的 solotion。只是想了解为什么浏览器(或 acrobat 插件)会忽略指定的标头。提前感谢您的回答。
        猜你喜欢
        • 2010-09-19
        • 2023-04-01
        • 2016-09-10
        • 1970-01-01
        • 2017-03-13
        • 2012-03-26
        • 2014-10-05
        • 2012-04-07
        • 1970-01-01
        相关资源
        最近更新 更多