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

Jam*_*len 6 pdf internet-explorer caching browser-cache expires-header

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

http: // mydomain.com / somefolder / myFile.pdf
Run Code Online (Sandbox Code Playgroud)

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

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

Internet Explorer中是否存在一个错误,使其无论何时都始终使用静态文档(例如PDF,DOC)的本地副本?

这些想法不起作用:

  1. F5CTRL+ F5SHIFT+F5

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

我唯一了解的方法是:

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

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

  3. 将服务器缓存设置为“立即过期”,但是pdf包含在带有网页的文件夹中,我不希望这样做。我想将缓存最长期限用于CSS,脚本,图像等其他内容。

  4. 在末尾添加一个伪查询字符串(如?id = 1),该方法有效,但是业务线中有100多个文档,每个文档中的链接都必须更新。

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

是否有一个真正的解决方案,以使IE像我想的那样工作?

小智 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>
Run Code Online (Sandbox Code Playgroud)