我的任务是维护一个PHP网站,该网站具有自动生成RTF文件并提供下载链接的功能。每次先前生成的文件被新的文件覆盖。
但是,似乎在尝试下载生成的文件时,浏览器有时会检索通常与最新版本不同的缓存版本(因此您获得与上次相同的文档而不是您请求的文档)。
我设法通过为每个生成的文件提供基于当前时间戳的唯一名称来解决这个问题,但这会在目录中产生大量混乱,需要定期清理。理想情况下,我想标记此文件,以便浏览器不会缓存它,并且每次都会获得最新版本。我怎么能实现这个目标?
答案 0 :(得分:5)
除了可以在URL中添加随机GET字符串(通常是最简单的方法)之外,还可以通过发送正确的标题来解决这个问题。
由于您要生成静态文件,因此需要在.htaccess
文件中进行设置。它必须如下所示:
<FilesMatch "\.(rtf)$">
Header set Cache-Control "no-store"
</FilesMatch>
答案 1 :(得分:4)
最简单的方法?而不是链接到http://yoursite.com/file.rtf,链接到http://yoursite.com/file.rtf?<?=time()?&gt; 。这将附加一个查询字符串参数,该参数在客户端每次请求时都会有所不同,因此不会被缓存。
答案 2 :(得分:1)
您可以将当前时间值标记为您提供的文件
... / file.rtf?15072010141000
这样您就不必生成唯一的名称,但可以确保不会缓存将来的请求。
答案 3 :(得分:0)
虽然使用Pekka建议的无缓存头的简单解决方案可行,但如果多次下载相同的文件,您将失去缓存的潜在好处。
如果RTF文件很大,并且您希望用户在文件实际未更改时享受缓存的好处,您可能需要检查以下答案: