No-caching一页

No-caching a page

我需要防止页面缓存,以确保它始终显示最新数据。我通过在页面顶部添加一些 PHP 来完成此操作。

//Set no caching
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

它已经解决了眼前的问题,但我不确定这是否意味着每次都必须重新加载外部脚本。该页面使用 jquery、jquery-ui 和其他一些脚本,因此为了连接速度慢的用户的利益,最好避免重新加载它们。

那些 headers 是强制重新加载所有内容还是仅强制重新加载页面上的实际代码?

Headers 适用于您将它们添加到的文件。这部分是出于安全考虑(您网站上的文件可能来自多个不同的服务器),还因为您可能希望为不同的 object 设置不同的缓存设置。

如果您通过 CDN 加载 jQuery,它将使用 CDN 的缓存设置,它总是有很长的到期时间。 (CDN 也可能使用 gzip 压缩。)

对于大多数 PHP 站点,除了 PHP 页面之外的所有内容都将直接通过服务器提供,而无需触及 PHP 解释器,因此例如在 Apache 中,您可以使用mod_expires 控制某个 content-type 文件的缓存设置(例如 image/jpg 或 application/javascript)。

要验证发生了什么,请在浏览器中打开开发人员工具并查看“网络”面板,您将能够检查页面上每个 object 的缓存设置。

如果您想保证某些东西的新版本 - 例如您刚刚修改的 CSS 文件被发送给用户,一种快速简便的方法是添加 a version number to the query string,然后浏览器将始终重新加载它。