您当前的位置:首页 > 网站建设笔记 >

PHP header()函数调整调整浏览器缓存

来源:PHP5 高级应用开发实践0

Web浏览器和代理服务器(由ISP或其他一些公司建立,用于提高网络性能)一般会缓存Web页面。缓存页面意味保存其内容(或部分内容,比如图像或视频),然后在产生请求时提供这个保存的页面,而不是服务器上的页面。

对于大多数末端用户来说,这不是个问题。事实上,他们可能根本没有意识到自己看到的是过期页面或图像。但是,在开发站点时,如果你曾经设置Web浏览器使其识别你对页面所做的改变,那么就应该已经体会到缓存的负面作用了。对于动态的、PHP驱动的站点,有时我们需要确保末端用户获得页面的最新版本。

利用PHP的header()函数可以调整Web浏览器和代理服务器的缓存。这里涉及4种头标类型:

  • Last-Modified(最后修改时间)
  • Expires(有效期限)
  • Pragma(编译指示)
  • Cache-Control(缓存控制)

前三个头标属于HTTP 1.0标准。头标Last-Modified使用UTC(国际标准时)日期时间值。如果缓存系统发现Last-Modified值比页面缓存版本的更接近当前时间,它就知道应该使用来自服务器的新版本 。

Expires表明了缓存版本何时应该过期(格林威治标准时间)。把它设置为一个以前的时间就会强制使用服务器上的页面。
header("Expires: Mon, 29 Oct 1976 05:00:00 GMT");

Pragma 声明了页面数据应该如何被处理。可以这样避免对页面进行缓存:
header("Pragma: no-cache");

Cache-Control 头标是在HTTP 1.1里添加的,能够实现更细致的控制(还应该继续使用HTTP 1.0头标)。Cache-Control的设置有很多,如下表所示。

Cache-Control 指令
指令 含义
public 可以在任何地方缓存
private 只能被浏览器缓存
no-cache 不能在任何地方缓存
must-revalidate 缓存必须检查更新版本
proxy-revalidate 代理缓存必须检查更新版本
max-age 内容能够被缓存的时期,以秒表示
s-maxage 覆盖共享缓存的max-age设置

把这些信息综合在一起,为了避免任何系统对页面进行缓存,应该使用如下头标。

header("Last-Modified: Thu, 29 Oct 2007 14:26:00 GMT");
header("Expires: Mon, 29 Oct 1976 05:00:00 GMT");
header("Pragma: no-cache");
header("Cache-Control: no-cache");

虽然这种方法很常见,但的确很笨拙。并不是每个PHP脚本都不能缓存,甚至是最活跃的站点也会把一些脚本缓存几分钟或更长时间(活跃站点会频繁地收到大量请求,而缓存版本能够减少服务器的负载)。

顶部中部底部