具体流程:客户端发送第一个请求时候,服务器端将文件最新修改的时间last-modified发送给客户端,当客户端在此发送请求是时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的 Last-Modified 最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。
PHP实现例子:
<?php
$client_time = (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) : 0);
$last_modifiy = 0;
if(file_exists('content.txt'))
{
$content = file_get_contents("content.txt");
$last_modifiy = filemtime("content.txt");
}
$ExpiresDate=(10*365*24*60*60);
$timefomat='D, d M Y H:i:s';
$Expires=$lastmod + $ExpiresDate;
if ($last_modifiy> $client_time){
header('Expires: '.gmdate($timefomat, $Expires).' GMT');
header('Last-Modified: '.gmdate($timefomat, $lastmod).' GMT', true, 200);
echo $content;
}else{
header('Expires: '.gmdate($timefomat, $Expires).' GMT');
header('Last-Modified:'.gmdate($timefomat, $client_time).' GMT', true, 304);
exit(0);
}
?>
|