最近写了个站点,需要对网站图片做自适应处理。比如在PC就显示大图,在移动就显示小图。没办法只能用动态输出图片的方式。传到服务器后发现,图片没有被缓存,也就是说每次都需要从服务器读取图片。这样明显是浪费服务器资源,必须想办法对这种类型的图片做缓存。
Last-Modified 与If-Modified-Since都是用来记录页面的最后修改时间。当客户端访问页面时,服务器会将页面最后修改时间通过 Last-Modified 标识由服务器发往客户端,客户端记录修改时间,再次请求本地存在的cache页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的最后修改时间戳发送回去,服务器端通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。
$header = array(
"Cache-Control" => "private, max-age=10800, pre-check=10800",
"Pragma" => "private",
"Expires" => date(DATE_RFC822,strtotime(" 2 day")),
"Last-Modified" => date(DATE_RFC822,strtotime(" -2 day")),//内容的最近修改时间
);
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
// 如果浏览器已经有该图片的缓存,则直接返回304。这里可以根据自己的业务逻辑做下判断,如果Last-Modified大于HTTP_IF_MODIFIED_SINCE则重新获取,否则返回304;
header('Last-Modified: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304);
exit;
}