浏览器不会从服务器请求最新的 PDF

问题描述 投票:0回答:3

我在 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. F5CTRL+F5SHIFT+F5

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

我知道的唯一方法是:

  1. 手动删除本地PDF,因为“删除历史记录”按钮不会删除本地版本。 但大多数用户都没有那么精明。

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

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

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

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

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

internet-explorer pdf caching browser-cache expires-header
3个回答
4
投票

我能够更改 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>

1
投票

与 GNakano 关于使用 .htaccess (在 Apache 上)使用每个文件类型的缓存过期的回答类似,以下文章介绍了如何在 IIS 上使用 web.config 设置每个目录的缓存过期:如何配置每个文件夹的静态内容缓存和IIS7 中的扩展?

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


0
投票

我还没有在所有浏览器或网络服务器中对此进行测试,但如果动态地将随机数和/或时间戳附加到网址,则不需要的缓存似乎不太可能:

http: // mydomain.com / somefolder / myFile.pdf ? random=4983107829

(制作时请去掉样品中的空格)

© www.soinside.com 2019 - 2024. All rights reserved.