【问题标题】:Browser Won't Request Latest PDF from Server浏览器不会从服务器请求最新的 PDF
【发布时间】:2014-08-05 18:21:20
【问题描述】:

我在 Windows Server IIS Web 服务器上有一个 PDF,用户使用 IE8/9/10 使用这样的 HTTP 调用请求它...

http: // mydomain.com / somefolder / myFile.pdf

第一次点击将下载文件没有问题。 问题:如果管理员更新 PDF,而用户返回重新加载,IE 仅显示本地缓存版本,不会向服务器请求新版本。

我已经确认,在第二次请求中,IE8、IE9 和 IE10 根本不会为 PDF 文件调用服务器。甚至没有条件请求(例如,if-updated-since)。使用 Fiddler 和 WireShark 确认了这一点。但我从来没有用 Max-Age 或任何东西明确设置缓存。我没有为该文件夹设置缓存。我不希望将缓存设置为“立即过期”。它也适用于 Word DOC。

Internet Explorer 中是否存在导致它始终使用静态文档(例如 PDF、DOC)的本地副本的错误?

这些想法行不通:

  1. F5, CTRL+F5, SHIFT+F5

  2. 使用“删除历史记录”按钮清除浏览器历史记录和缓存。为什么这实际上并没有清除所有缓存超出了我的范围。除了密码,我已选择删除所有内容。

我知道的唯一方法是:

  1. 在本地手动删除 PDF,因为“删除历史”按钮不会删除本地版本。但大多数用户并不那么精通。

  2. 使用 Firefox,但这不是公司认可的浏览器。不要让我开始。

  3. 将服务器缓存设置为立即过期,但 pdf 文件与网页混合在文件夹中,我不想这样做。我想将缓存最大年龄用于 CSS、脚本、图像等其他内容。

  4. 在末尾添加一个假的查询字符串,例如 ?id=1,这样就可以了,但是业务线有 100 个文档,每个文档中的链接都必须更新。

  5. 使用 FIDDLER“清除缓存”按钮或 CCleaner,但我公司的大多数用户(7 万名员工)都不是开发人员,无法拥有该软件。

是否有真正的解决方案,让 IE 表现得像我想象的那样?

【问题讨论】:

  • 我遇到了同样的问题,并选择通过响应标头设置在 IIS 站点上将客户端缓存设置为“立即过期”来解决它,使用iis.net/configreference/system.webserver/staticcontent/… 中描述的简单方法。不得不使用这个设置让我感到惊讶,因为我之前根本没有做过缓存设置——但显然 IE 使用一些不同的默认缓存策略,如果在响应头中没有指定(这是 IIS 默认值),与例如铬。

标签: internet-explorer pdf caching browser-cache expires-header


【解决方案1】:

我能够更改 htaccess 文件以将年龄添加到 pdf 文件的缓存中。这非常适合在 IE 和其他浏览器上修复此问题,其中刷新或重新打开浏览器即可解决问题。

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

<FilesMatch ".(pdf)$">
  Header set Cache-Control "max-age=0"
</FilesMatch>

</IfModule>

【讨论】:

    【解决方案2】:

    与 GNakano 关于使用 .htaccess(在 Apache 上)对每个文件类型使用缓存过期的回答类似,以下文章描述了如何在 IIS 上使用 web.config 设置每个目录的缓存过期:How to configure static content cache per folder and extension in IIS7?

    使用这种方法,您只需将所有 .pdf 和 .docx 放在单独的文件夹中(没有缓存),然后仍然可以缓存其他内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 2012-05-10
      • 2019-05-06
      • 2016-08-05
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多