IE未显示禁用缓存的PDF

时间:2010-11-10 09:51:07

标签: asp.net iis

我被要求实施安全要求,指示浏览器不要缓存敏感数据。使用标准指令对ASPX内容都很好:

        Response.Expires = -1;
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();

然而,当我为PDF下载设置这些标题时,IE8将不显示PDF(还没有尝试过其他IE版本,有点没事,我需要它在所有这些上工作,甚至IEfreaking6)。似乎在firefox 4 beta中工作,但我没有仔细检查它肯定没有缓存它。以下是我用于提供PDF的代码的删节版本:

        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.Buffer = true;

        //This stops the PDFs from being viewed :(
        //Response.Expires = -1;
        //Response.Cache.SetCacheability(HttpCacheability.NoCache);
        //Response.Cache.SetNoStore();

        Response.ContentType = mime;
        Response.AddHeader("Content-Disposition", disposition);

        Response.BinaryWrite(file);

        Response.End();

在PDF的情况下,mime类型设置为:

       private const string mimeTypePDF = "application/pdf";

处置设置为:

       var disposition = String.Format("{0};filename=\"{1}\"", SendInline ? "inline" : "attachment", Path.GetFileName(filename));

我打算多玩一些,可能会强迫他们下载,因为mimetype“application / octet-stream”可能会起作用,但这会阻止在新的浏览器窗口中打开好的PDF文件。

是否有人阻止IE从服务器端缓存PDF并成功显示它们?

只是为了说明发生了什么。在一种情况下,用户可以从列表中选择一堆报告,这些报告被编译成PDF,PDF将显示在新的浏览器窗口中。启用缓存后,浏览器窗口将打开,但仍然是空白。

5 个答案:

答案 0 :(得分:2)

几年前我遇到了与IE相同的问题,因为我没有要求禁止它,所以让它缓存。

但是,由于用户可以在浏览器显示后立即保存PDF文档,因此您打算如何防止他们这样做?

这不会解决您的问题,但在发送物理文件时,您应该使用Response.TransmitFile而不是BinaryWrite。它在内存利用率方面更快,更高效,因为在发送之前不需要将整个文件加载到内存中。

答案 1 :(得分:1)

看起来这个问题已在IE9中得到解决。

我现在可以成功执行以下操作:

    Response.Expires = -1
    Response.Cache.SetNoStore()
    Response.AppendHeader("Pragma", "no-cache")
    Response.ContentType = "application/pdf"
    Response.BinaryWrite(myByteBuffer)
    Response.Flush()
    Response.Close()

享受!

答案 2 :(得分:0)

我要说它目前还不可能,我尝试的任何东西似乎都没有让它发挥作用。尝试让客户使用firefox代替! :)

答案 3 :(得分:0)

我也相信这是Internet Explorer中的一个错误。我将cache-control标题设置为no-cache并遇到同样的问题。另请注意,在“Internet选项”中>高级>安全性有一个'不要将加密的页面保存到磁盘'选项可能会影响它。

从响应中删除cache-control标头解决了我的问题。然后我也尝试检查上面提到的选项,它似乎对我来说更好。它不是将PDF存储在%LocalAppData%\Microsoft\Windows\Temporary Internet Files中,它实际上导致IE8发出一个对话框,允许我选择保存它的位置(这实际上就是我想要的)。

答案 4 :(得分:0)

使用no-cache标头在浏览器中显示pdf(和其他文档类型)的问题已作为错误提交给Microsoft:http://support.microsoft.com/kb/316431。当您尝试在这种情况下打开文档时,IE会尝试从缓存中读取它,但它不存在。

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