PHP 缓存之客户端缓存

来源:互联网 发布:landesk远程控制软件 编辑:程序博客网 时间:2024/04/30 13:04

今天主要说一下客户端缓存

客户端缓存主要是通过http response header中的cache-control来实现的


当点击go时, 第一次请求client.php,  会直接向服务器发出请求, 当返回重新点击go时, 由于请求的文件已经被缓存起来, 所以再次请求是不会向服务器发出请求的, 这一点可以通过firebug或其他调试工具查看.

cache-control

max-age=[秒] — 执行缓存被认为是最新的最长时间。类似于过期时间,这个参数是基于请求时间的相对时间间隔,而不是绝对过期时间,[秒]是一个数字,单位是秒:从请求时间 开始到过期时间之间的秒数。

must-revalidate — 告诉缓存必须遵循所有你给予副本的新鲜度的,HTTP允许缓存在某些特定情况下返回过期数据,指定了这个属性,你高速缓存,你希望严格的遵循你的规则。

no-cache — 强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认认证应用很有用(可以和public结合使用),或者严格要求使用最新数据 的应用(不惜牺牲使用缓存的所有好处);

last-modified

有些数据随时都在变化。 CNN.com 的主页经常几分钟就更新。另一方面,Google.com 的主页几个星期才更新一次 (当他们上传特殊的假日 logo,或为一个新服务作广告时)。 Web 服务是不变的:通常服务器知道你所请求的数据的最后修改时间,并且 HTTP 为服务器提供了一种将最近修改数据连同你请求的数据一同发送的方法。

如果你第二次 (或第三次,或第四次) 请求相同的数据,你可以告诉服务器你上一次获得的最后修改日期:在你的请求中发送一个 If-Modified-Since 头信息,它包含了上一次从服务器连同数据所获得的日期。如果数据从那时起没有改变,服务器将返回一个特殊的 HTTP 状态代码 304,这意味着 “从上一次请求后这个数据没有改变”。这一点有何进步呢?当服务器发送状态编码 304 时,不再重新发送数据。您仅仅获得了这个状态代码。所以当数据没有更新时,你不需要一次又一次地下载相同的数据;服务器假定你有本地的缓存数据。

所有现代的浏览器都支持最近修改 (last-modified) 的数据检查。如果你曾经访问过某页,一天后重新访问相同的页时发现它没有变化,并奇怪第二次访问时页面加载得如此之快——这就是原因所在。你的浏览器首次 访问时会在本地缓存页面内容,当你第二次访问,浏览器自动发送首次访问时从服务器获得的最近修改日期。服务器简单地返回 304: Not Modified (没有修改),因此浏览器就会知道从本地缓存加载页面。在这一点上,Web 服务也如此智能。

expires

设置页面过期时间, 时间格式必须为格林威治时间

我们来看一个例子加缓存的例子

client.html

<a href="client.php">go</a>
client.php

header('Cache-Control:max-age=86400, must-revalidate');header('Last-Modified:' . gmdate('D, d Y M H:i:s') . 'GMT');header('Expires:' . gmdate('D, d Y M H:i:s', time()+'86400') . 'GMT');echo '我不刷新';
第一次点击go时会向服务器发出请求, 再次点击时是不会向服务器发出请求的

再来看一个不加缓存的例子

client02.html

<a href="client02.php">go02</a>

client02.php

header('Cache-Control: no-cache');header('Pragma:no-cache');echo '我刷新';
点击go02时每次都会向服务器发出请求



0 0
原创粉丝点击