【问题标题】:How to force re-caching of updated webpages如何强制重新缓存更新的网页
【发布时间】:2014-07-11 03:37:09
【问题描述】:

亲爱的堆栈溢出者,

我觉得我的问题一定很常见,这让我无法找到解决方案的事实更加令人费解。也许是我搜索能力差的原因。

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

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

我同样很乐意修改 htaccess 文件或添加 php 标头。任何建议将不胜感激。

非常感谢!

【问题讨论】:

    标签: php html mysql .htaccess caching


    【解决方案1】:

    在 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、图像等)。

    每次有人请求该页面时,将标头放到那里都会强制更新。

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

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

    【讨论】:

    • 感谢您的回复,Fluffeh。不,页面不是特别大,只是在加载时看起来不太漂亮:) 你可能是对的,我可以将有效期设置为一周。但是,如果每个月可能没有新的剧集,每周更新标题似乎需要做很多工作。但是,您的回复确实表明没有工具可做,我的想法是(将缓存的版本日期与文件的最后修改日期等进行比较)。我很惊讶——我认为这会很有用。再次感谢。
    猜你喜欢
    • 2023-01-11
    • 2018-06-22
    • 2015-03-04
    • 1970-01-01
    • 2010-11-15
    • 2020-09-17
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多