如何强制重新缓存更新的网页

时间:2014-05-22 08:02:58

标签: php html mysql .htaccess caching

亲爱的Stack Overflowers,

我觉得我的问题必须非常普遍,这使我无法找到更令人费解的解决方案。也许我的糟糕搜索能力是罪魁祸首。

我负责维护我的妻子website,主要由在线系列组成。该站点使用php从MySQL数据库生成页面(我想这将使其动态生成)。每次添加新剧集时,我都需要用链接和图像更新几页(索引和倒数第二集的页面)以指向这一新剧集。显而易见的问题是网站的缓存版本没有更新的链接。这是除非访问者重新加载其中一个更新的页面。处理它的一种方法是使这两个页面不可缓存,但这似乎有点残酷。

我已经阅读了有关Cache-Control的几个资源,但我仍然在寻找哪些参数在这种特定情况下有用。由于我不知道,下一集将会发布时,我无法使用“过期”和“过期”。或者' max-age' (或者我可以吗?)同样,因为我需要重新加载整个页面,所以我不能像文件一样更改文件名。我理想的做法是比较缓存版本的日期和文件的最后修改日期,如果缓存版本比文件旧 - 强制浏览器加载新版本。但我对其他方法持开放态度。

我同样乐意修改htaccess文件或添加php Header。任何建议都会非常感激。

非常感谢!

1 个答案:

答案 0 :(得分:0)

在PHP中,只需发送正确的标题:

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.

Headers控制浏览器如何处理各种事物,从缓存时间到发送什么类型的信息(html,图像等)。

删除标题会在每次有人请求页面时强制更新。

如果页面真的太大而无法每次发送(真的吗?它真的那么大吗?)那么为什么不将每天的缓存设置为每天一次,或者每周一次 - 这个值不会太长所以人们不会错过任何东西,但也不要太常见,所以他们不会下载太多。

另一种完全不同的方法实际上可能是让你的代码吐出从未缓存的tatic HTML页面 - 一些HTML不能发送太多kbs的数据,它可以节省你的服务器太多的请求。