【问题标题】:Problems with header() when displaying a PDF file in IE8在 IE8 中显示 PDF 文件时 header() 的问题
【发布时间】:2009-08-07 04:34:19
【问题描述】:

所以,我有一个发送以下内容的文件:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: private");
header("Content-type: application/pdf");
header("Content-disposition: inline; filename=file.pdf");
header("Content-length: 7735");

然后我回显文件 - 它是一个 PDF 文件。

在 XP 上的 IE6 和 7 中运行良好(和 FF 相关) 在 XP 或 Vista 上的 IE8 上运行时,相同的代码什么也没有显示。 没有安全警告等,所以我认为与此无关。

而且,如果我没记错的话,不久前这在 IE8 上有效。

我在这里做错了什么?我是否错过了标题中的某些内容?

有没有办法让我在 IE8 中查看 PDF 时查看正常的标题信息,以便我知道要模拟什么?

查看之后它仍然可以在 IE8 中运行,除非 SSL 开启

【问题讨论】:

  • 不要发送Content-Length 标头,让网络服务器来做。

标签: php pdf header


【解决方案1】:

在 HTTPS 和 IE8 下,这些标头修复了下载问题:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Pragma: public");

其他 X-something 标头没有任何区别。

【讨论】:

  • 这对我有用。此外,在 Cache-Control 标头中的任何位置都有“无缓存”会导致下载在 IE8 中失败。我在其他地方读过这是因为 IE8 在传输时将您的下载“缓存”在其临时文件夹中,但无法验证这一点。
  • 这是人们感谢stackoverflow存在的时代之一,而@mikikg正是在这种情况下。我找了这个标题修复了好几个星期。
  • 确实是最佳答案。为了交付我使用header('Cache-Control: max-age=2592000, public, post-check=0, pre-check=0'); 没有must-revalidate 的PDF,它也可以正常工作。
  • 我遇到了这个 HTTP 问题,这个修复也对我有用。谢谢!
  • 看了这篇文章想用post和pre-check的朋友不妨看看下面这篇文章:blogs.msdn.com/b/ieinternals/archive/2009/07/20/…
【解决方案2】:

这可能与 SSL 有关。我读了this article(德语,带有代码示例),其中作者设置了以下标题:

header('Pragma: anytextexeptno-cache', true);

【讨论】:

    【解决方案3】:

    我不确定需要什么,但您可以这样做。 将文件临时放在服务器上的公共位置,使您可以通过 IE8 中的直接链接下载该文件,使用 firefox LiveHTTP 标头或类似方法获取服务器发送的所有标头。以完全相同的方式吐出它们并在脚本中排序。 (并且不要忘记删除文件)。

    【讨论】:

    • 我正要说同样的话。 Fiddler 还会为您提供带有 IE 的标题。
    • 谢谢,成功了。我发现我向 IE 发送了错误的标题集(我使用的是发送到 firefox 的标题集)
    【解决方案4】:

    我想补充一点,因为我也遇到了这个问题,使用 Joomla 的方式略有不同。

    正常的 PDF 内容输出在所有浏览器中都能正常工作。

    但是从我自己的组件中生成一个 pdf(使用 JDocument,tho)产生了上面提到的行为。

    我的解决方案:使用 view.html.php 中的以下语句为我的组件显式启用缓存:

    JResponse::allowCache(true); 
    

    也许这对某人有帮助。

    【讨论】:

      【解决方案5】:

      我使用的是 HTTPS,但我遇到了一些问题,但使用这些标头下载确实如此。 尝试一下。

      header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
      header("Pragma: public"); 
      header("X-Download-Options: noopen "); // For IE8
      header("X-Content-Type-Options: nosniff"); // For IE8
      header("Content-type: application/pdf");
      header("Content-disposition: inline; filename=file.pdf");
      header("Content-length: 7735");
      

      问题是你不能直接打开。保存即可。

      【讨论】:

        【解决方案6】:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-25
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        • 2012-11-20
        • 2014-01-23
        • 1970-01-01
        相关资源
        最近更新 更多