浏览器HTTP请求头header缓存

                                     浏览器HTTP请求头header缓存

一、静态资源缓存

  • 对于PHP输出的内容,如果不是需要经常变动的内容(例如伪静态的一些页面,PHP输出JS或者CSS),使用PHP合理设置HTTP响应头添加缓存设置,让浏览器尽可能缓存下内容,在刷新和再次访问同样内容时,便不需要再次请求浏览器,从而能够大幅减少服务器的响应次数,同时浏览器呈现页面也会加快了,这是非常有用的一个技巧。
输出Cache-Control头:
header('Cache-Control:max-age=120');
  • 这个输出表明让浏览器缓存120秒。这个指令很有用,但是局限性在于,刷新这个页面时还是会重新请求,所以你会感觉这个头好像没什么作用,但是对于一些输出的JS、CSS内容时是有用的,也就是说你刷新的页面不是它本身,而只是引用了设置有此头的PHP文件的话,它就会在你指定的时间内从本地缓存中读取内容而不会请求服务器。同时通过超链接过来的已经请求过的页面时,你也会看到浏览器从本地cache里读取而不用通过服务器。

二、协商缓存

  • 当浏览器首次访问时,请求头不会带HTTP_IF_MODIFIED_SINCE这个东西,所以我们就设置了三个头。一个就是刚才第1点,Cache-Control头,告诉让浏览器自己缓存个120秒。
  • 第二个头Expires是表明,在当前时间的120秒后缓存失效,浏览器会在120秒后把缓存失效,再次请求时会到服务器端请求而不是本地。
  • 第三个头Last-Modified则是说明这个文档最后修改时间。可以看出输出的当前时间。
  • 有时候客户端浏览器的时间可能不准确,但是通过Last-Modified,可以提高缓存时间准确性的问题。
<?php
$interval=120; //2分钟
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
    // HTTP_IF_MODIFIED_SINCE即下面的: Last-Modified,文档缓存时间.
    // 缓存时间+时长.
    $c_time = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])+$interval;
    // 当大于当前时间时, 表示还在缓存中... 释放304
    if($c_time > time()){
        header('HTTP/1.1 304 Not Modified');
        exit();
    }
}
header('Cache-Control:max-age='.$interval);
header("Expires: " . gmdate("D, d M Y H:i:s",time()+$interval)." GMT");//告诉浏览器这个时间点过期
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");//最后修改时间
echo 111111;
echo ' - <a href="">点击重新载入本页面</a><br />';

三、实例截图

猜你喜欢

转载自blog.csdn.net/m0_38004619/article/details/89405728