【问题标题】:Enable pdf caching in IE在 IE 中启用 pdf 缓存
【发布时间】:2010-12-20 22:25:48
【问题描述】:

起初,缓存并非在所有浏览器中都有效。然后我通过将 .pdf 扩展名添加到 url 使其在除 IE (IE8) 之外的所有浏览器中工作。之后不再调用 Servlet。

我通过加载以下网址的 EMBED 标签在网页上内嵌显示 pdf 文件:

http://localhost:7001/app/viewFile.pdf

由 java servlet 生成,具有以下标头:

response.addHeader("Content-Disposition", "inline;");
response.setHeader("Cache-control", "cache,max-age=600");
response.setContentType(mimeType);
response.setContentLength(contentLength);

对于在所有浏览器中显示的 pdf,我使用 Adob​​e Reader 9.2.0。

如何让它在 IE 中也能工作?我注意到 IE 在 request 中添加了 'Cache-Control: no-cache' 标头,而 Safari 则没有。

【问题讨论】:

    标签: java internet-explorer pdf caching acrobat


    【解决方案1】:

    如前所述,cache-control 标头值 cache 无效。请改用public

    至于 IE 在 embedobject 元素中没有遵守服务器端缓存控制规则,不幸的是,这是 IE 的一个“特性”。你能做的最好的就是用iframe 元素替换它。

    expireslast-modifiedetag 等其他标头无济于事。

    【讨论】:

    • 有详细的链接吗?我很久以前尝试过 iframe,但它没有帮助。我今天会再试一次。
    • Cache-control: public,max-age=600 Pragma: public,max-age=600 此外,其他浏览器(尝试过 Safari)在 iframe 中停止缓存 pdf。
    • 有趣的是,我用iframepublic,max-age=600cache-control 在PDF 文件的标题上创建了一个测试用例,它在FF/IE/Chrome/Opera 中工作,但确实失败了在 Safari 中。
    • 不幸的是,IE 无法预测。
    • 我又试了一次,它成功了。你是对的!使用 iframe,IE 会发送一个不同的请求,其中“接受”不同,并且此请求中没有无缓存 :) 剩下一个问题 - Safari。
    【解决方案2】:

    需要研究的一些想法:

    1. 我认为 cache 不是有效的 Cache-Control 指令。

      尝试改用 public 值,如果更适合您的内容,请尝试使用 private。查看RFC 2616 了解更多信息。

    2. 也许您要发送多个 Cache-Control 指令?

      使用工具 喜欢FirebugLiveHTTPHeaders 偷看 您的浏览器的实际标题是 接收。确保他们不是 得到你意想不到的东西。 听起来你可能已经是 虽然这样做。还要确保你没有同时发送Pragma: no-cache

    3. 尝试设置 Expires 标头除了使用 Cache-Control.

      这也是可能的 你正在发送浏览器 冲突Cache-Control/Pragma 标头和 IE 选择采用 Pragma 标头作为任何向后的原因的第一优先级。

    4. 确保 IE 配置为允许缓存! :)

      Control Panel> Internet Options > Temporary Internet Files > Settings > Check for newer versions of stored pages

    5. 尝试发送 PDF 作为对 POST 请求的响应(通过表单提交)。

      由于RFC 2616 的要求,IE 允许缓存不管响应中的标头如何:“默认情况下,如果请求方法、请求标头字段、 的要求,响应是可缓存的并且响应状态表明它是可缓存的。”对POST 请求的响应不可缓存,因此 IE 不应在其请求中包含该标头。

    6. 尝试发送具有一致值的 Content-MD5Last-Modified 标头(如果尚未发送)。

      这可能有助于让 IE 相信 PDF 的内容没有改变。我觉得这个方案行不通,因为 IE 显然很顽固,但值得一提。

    【讨论】:

    • 有趣的是,当我在“检查存储页面的较新版本”中设置“从不”时,IE 仍然会获得新版本的 pdf :S
    • 我又添加了两个建议(5 和 6)。我认为第五个是你最好的选择。
    【解决方案3】:

    嗯,解决该问题的一种明显方法是使用 URL 重写。如果 IE 在扩展名中使用 .pdf,请使用 mod_rewrite (Apache) 或类似工具将服务器端重定向到正确的页面,同时让客户端认为它确实在请求 PDF 文件。

    另外:使用 Fiddler 等工具查看客户端接收的 HTTP 标头。

    另外:查看这个较早的问题 (PHP: Force file download and IE, yet again),我也遇到过类似的问题,即 IE 不强制下载。

    【讨论】:

    • 浏览器不在乎 URL 中的扩展名是什么。它只会查看 MIME 类型。
    • 他们应该查看 MIME 类型,但他们没有(正如我在问题中所说)。虽然,我还不确定是谁的错:浏览器的还是 adobe 阅读器的。
    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2015-12-13
    • 2014-12-22
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多