background image

(3)Last-Modified:文档的最后修改时间。它的用法就是:

1:如果是静态文件,客户端会发上来它缓存里的时间,apache 会来比对,如果发现没有
修改就直接返回一个头,状态码是 304

 

,字节数非常少。

2:如果是 php 动态文件,客户端发上比对时间,php 会判断是否修改,如果修改时间相
同,就只会返回 1024 字节,至于为什么返回 1024 不得而知,如果你的 php 生成的文件非
常大,它也只返回 1024,所以比较省带宽,客户端会根据服务器端发过来的修改时间自
动从缓存文件里显示。

注意:如果没有设置 Last-Modified 头,只设置了 Cache-Control 和 Expires 也是可以起作用
的,但每次请求要返回真实的文件字节数,而不是 1024

php

 

设置 Last-Modified 头标示例代码如下:

查看代码打印 1 header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).' GMT');//使用的是
格林尼治时间,$time

 

是指文件添加时候的时间戳

下面发一个完整的通过 php 控制请求页面浏览器缓存的示例:

查看代码打印 1 <?php  

2 echo '这是一个缓存测试!';  

3 $time=time();  

4 $interval=3600*12;//12

  

小时

5 header('Last-Modified: '.gmdate('r',$time));  

6 header('Expires: '.gmdate('r',($time+$interval)));  

7 header('Cache-Control: max-age='.$interval); 

另外分析一下刷新,转到以及强制刷新的区别,浏览器上有刷新和转到按键,有的浏览
器支持用 ctrl+F5 强制刷新页面,它们的区别是什么?恐怕知道的人不多吧!其实这三种
动作完全可以用上面这三种头标进行解释。

转到:用户点击链接就是转到,它完全使用缓存机制,如果有 Last-Modified 那么不会和
服务器通讯,用抓包工具可以查看到发送字节是 0byte,如果缓存过期,那么它会执行 F5
刷新的动作。

刷新(F5):这种刷新也是根据缓存是否有 Last-Modified 来决定,如果有会转入 304 或
1024(php),如果没有最后更新时间那么去服务器读取,返回真实文档大小。