如何控制浏览器缓存


How to control browser cache?

我正在一个网站上工作,那里的观众对电脑不是很满意。过去经常收到的投诉是关于(次要(新更新,尽管重要的更新不可见(例如日期和时间被更改(。问题:浏览器缓存和人们不知道如何刷新浏览器。由于受众相当多,不可能向所有人解释这一点。

我们将很快将一个全新的网站上线,所以我怀疑此更改会导致浏览器获得更新......我说的对吗?

但是为了防止过去的抱怨,我希望更好地控制用户的浏览器缓存。

最好在每页放置一个缓存时间(在一天到一周或两周之间(,因为对于一般信息来说,缓存是一件好事,因为它不会经常更新,而且它不像我们的日历那样对时间敏感!但我想要在上次访问后的一天内获得新版本的日历。-->如果可能的话,我什至会考虑缓存页面的某些部分(页眉和页脚不太可能更改内容等(

最好的方法是什么?我是否应该更改服务器设置上的某些内容(在托管允许的范围内(以及如何执行此操作(托管控制面板,php.ini(?

还是我应该在 PHP 中做点什么?或者在 HTML 中,就像我在这里找到的那样:HTML 缓存控件

或者也许是上述部分/全部的组合?

你可以

PHPHTML来做到这一点

.PHP

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

.HTML

<meta http-equiv="expires" content="Day, 01 Mon 2014 00:00:00 GMT"/>
<meta http-equiv="pragma" content="no-cache" />

确保将其放在PHP或HTML的主包含文件中,以便为所有页面执行此操作。我会在 html 上使用 php 标头。

您可以通过 .htaccess 实现此目的:

<filesMatch "'.(php|html|htm|js|css)$">
  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 "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

这将使服务器缓存过期,每个请求都将获得新页面