【问题标题】:Change PDF cache rate or a solution to download vs open PDF in new window?更改 PDF 缓存速率或下载与在新窗口中打开 PDF 的解决方案?
【发布时间】:2013-04-02 21:54:37
【问题描述】:

我在这里做了很多搜索,并应用了一些提到的方法,但没有任何运气。

我的问题是我管理的一个网站,客户每周都会以相同的文件名上传一个新的 PDF。问题是人们试图下载这个,很多人抱怨它加载了过去几周的 PDF。这是由于浏览器缓存,因为当我告诉他们清除缓存时一切正常。

我有两种可能的解决方案:

1) 强制下载 PDF 文件,而不是在新窗口中打开。现在我已经尝试了各种 htaccess 调整,但似乎都无法在 IE9 或 Safari 上运行。

2) 以某种方式更改缓存率,以便 PDF 文件的缓存率仅持续一分钟,我不知道如何做到这一点,甚至是否可能?

有没有人有任何解决方案,而不是每次都链接文件名?我们不这样做的原因是她想自己上传 PDF,而不必担心编辑 HTML 文件链接。

提前致谢, 马特

【问题讨论】:

  • 添加缓存清除查询字符串? http://example.com/whatever.pdf?random_value_here。 PDF 将忽略查询字符串,浏览器每次都会认为它是一个“新”url,完全跳过缓存。如果需要,可以在文档加载时通过 javascript 轻松添加 cache-buster 值。
  • 我们通常将它的路径保存在数据库中。我们有 2 列 - 一列用于服务器名称,一列用于客户端名称。客户端名称可以始终相同,但服务器名称始终是唯一的(通常基于日期)。因此,您从带有服务器名称的页面打开 pdf,然后将其名称更改为用户的客户端名称。
  • @MarcB 很有趣,但如果随机值保持不变,最终不会出现同样的问题吗?问题是客户不想进入 HTML 文件来更改链接,只是继续重新上传 PDF。
  • 因此使用 JS 来完成。例如<a id="pdflink" href="yourfile.pdf">click</a><script>document.getElementById('pdflink').add_cache_buster_to_href();</script> 之类的。
  • @MarcB 这很有道理,这个想法,但我仍然不确定如何使用它,有没有你知道的教程?

标签: .htaccess caching pdf browser-cache


【解决方案1】:

您可以使用FilesMatch 容器和mod_headers 来完成所有浏览器、客户端和代理中的缓存预防:

<FilesMatch ".pdf$">
    FileETag None
    <IfModule mod_headers.c>
        Header unset ETag
        Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires "Thu, 1 Jan 1970 05:00:00 GMT"
    </IfModule>
</FilesMatch>

【讨论】:

  • 该网站在 HMTL 中。非常基本的网站。将上述代码添加到我的 htacess 时,我还会收到“内部服务器错误 500”。
  • 确实很奇怪 - 我的测试服务器上没有出现错误...它只能这样做是因为您的服务器不支持 FilesMatch 容器,这不应该是这种情况(我从未听说过这样的问题)。
  • 它现在工作了,我在顶部的 .htaccess 中的其他内容之前添加了它,现在它很好:)
  • 它肯定每次都提供一个新的副本吗?
  • 显然没有,他们尝试更新其他一些 PDF,但没有成功,他们一直看到旧版本?!还有其他想法吗?他们在 IE 上。谢谢@mike-anthony
猜你喜欢
  • 2022-06-19
  • 2014-07-01
  • 2020-04-16
  • 1970-01-01
  • 2012-09-01
  • 2013-03-07
  • 2022-12-09
  • 2015-10-17
  • 2012-09-01
相关资源
最近更新 更多