代码之家  ›  专栏  ›  技术社区  ›  Andrew Barrett

IE未显示禁用缓存的PDF

  •  1
  • Andrew Barrett  · 技术社区  · 14 年前

    我被要求实现一个安全要求,我们指示浏览器不要缓存敏感数据。对于使用标准说明的ASPX内容,这一切都很好:

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

            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”可能有用,但这会阻止新浏览器窗口中的nice open PDF的工作。

    有没有人成功地阻止IE从服务器端缓存pdf并成功地显示它们?

    只是为了给我们一个清楚的例子。在一个场景中,用户可以从列表中选择一组报告,这些报告被编译成PDF,PDF显示在一个新的浏览器窗口中。启用缓存后,浏览器窗口将打开,但绝对保持空白。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Shiv Kumar    14 年前

    几年前我也遇到过同样的问题,因为我没有要求不允许它。

    但是,由于用户可以在浏览器显示PDF文档后自由保存该文档,您如何计划防止他们这样做?

        2
  •  1
  •   Dave Kingston    7 年前

    看来这个问题已经在IE9中解决了。

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

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

    享受吧!

        3
  •  0
  •   Andrew Barrett    14 年前

    我要说的是,这是目前不可能的,我没有试图让它工作。试着让你的客户改用火狐!:)

        4
  •  0
  •   jamiebarrow    14 年前

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

    移除 缓存控制 %LocalAppData%\Microsoft\Windows\Temporary Internet Files ,它实际上导致IE8发出一个对话框,允许我选择保存它的位置(在我的案例中,这实际上是我想要的)。

        5
  •  0
  •   P4ndaman    13 年前

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

    不幸的是,M$的人说这“按设计工作”,用户不应该使用无缓存头。。。想想看。