浏览器无法从服务器请求最新PDF

时间:2014-08-05 18:21:21

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

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

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. 使用DELETE HISTORY按钮清除浏览器历史记录和缓存。为什么这实际上并不清楚所有缓存都超出了我。除密码外,我已选择删除所有内容。

  3. 我知道的唯一方法是:

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

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

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

    4. 在最后添加一个假的查询字符串,如?id = 1,这样可行,但该业务行有100个文档,每个文档都包含必须更新的文档内的链接。

      < / LI>
    5. 使用FIDDLER“clear cache”按钮或CCleaner,但我公司的大多数用户(70,000名员工)不是开发人员,也不能拥有该软件。

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

2 个答案:

答案 0 :(得分:2)

我能够更改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 :(得分:1)

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

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