我们往往在服务器上对缓存设置进行各种优化方案,但是我们却很少注意到
客户端缓存,准确的说是浏览器的缓存机制。
其实每种浏览器都有缓存策略,会暂时将每一个浏览过的文件缓存在一个特殊的文件夹里。我们就可以在用户重复提交页面请求的时候,告诉用户这个页 面没有改变,可以调用缓存。 那我们怎么知道用户有没有这个页面的缓存数据呢? 其实浏览器在发送请求的时候会先发送http头,一般象这样:
Date: Sun, 30 Jul 2006 09:18:11 GMT
Content-Type: image/gif
Last-Modified: Wed, 19 Jul 2006 07:40:06 GMT
ETag: "8c55da8d6abc61:2327"
Content-Length: 14757
其中
Last-Modified: Wed, 19 Jul 2006 07:40:06 GMT
ETag: "8c55da8d6abc61:2327"
就是有关页面的缓存信息的。然后如果服务器返回的响应代码不是HTTP 200 (OK),而是 304的话,浏览器就会从缓存中读取数据。
//告诉客户端浏览器不使用缓存,HTTP 1.1 协议
header("Cache-Control: no-cache, must-revalidate");
//告诉客户端浏览器不使用缓存,兼容HTTP 1.0 协议
header("Pragma: no-cache");
根据这个原理,可以用在不经常更新或者需要经常刷新的页面,可以大大减轻服务器的负担,因为它如果发现客户端有缓存,就向客户端发送一个304响应,然后停止程序的执行。
浏览器发出的请求中包含If-Modified-Since和If-None-Match 两个参数,第一个表示询问数据的最后修改时间是否是Thu,19 Jun 2008 16:24:01 GMT 然后服务器就会检查数据的最后修改时间,如果是该时间则返回状态码304(表示没有修改),此时当浏览器收到状态码是304时就不会下载数据而是从本地缓 存中调用。然而只有本地缓存中存在着该请求资源的数据时浏览器才会发送If-Modified-Since参数并且其值为上一次服务器所返回的Last- Modified的值(并不是所有的服务器都支持If-Modified-Since和If-None-Match );If-None-Match的功能也类似,它是由服务器返回的Etag的值生成的,可以是任意值,因为其作用仅仅是使服务器检查数据的修改时间然后返 回而已,只要不为none(默认值)或不为空其它的都可以。
所以我们可以在代码的最前部分设置返回给浏览的Etag为某个值,然后在这个资源被第二次请求的时候就会附带着一个If-None-Match 参 数,通过核实其值确实为所发出的Etag值时就可以指定服务器返回为304然后强行退出程序就行了,If-Modified-Since也是一样的做法这 里就只给出etag方法的php版(Last-Modified版的太常见了如设置缓存超时等等):
PHP 代码复制到剪贴板
复制代码 代码如下:
if ($_SERVER["HTTP_IF_NONE_MATCH"] == "claymorephp.com")
{
header('Etag:'.'zhaiyun.com',true,304);
exit();
}
else {
header('Etag:'."claymorephp.com");
}
你还可以稍微改一下:
$expires=date("Ymd"); //一天后缓存过期
if ($_SERVER["HTTP_IF_NONE_MATCH"] == $expires)
{
header('Etag:'.$expires,true,304);
exit();
}
else {
header('Etag:'.$expires);
}
if ($_SERVER["HTTP_IF_NONE_MATCH"] == "claymorephp.com") { header('Etag:'.'zhaiyun.com',true,304); exit(); } else { header('Etag:'."claymorephp.com"); } 你还可以稍微改一下: $expires=date("Ymd"); //一天后缓存过期 if ($_SERVER["HTTP_IF_NONE_MATCH"] == $expires) { header('Etag:'.$expires,true,304); exit(); } else { header('Etag:'.$expires); }
另外,当GZIP和ETAG同时使用时有时会出问题,就是ETAG没有值,这个问题是普遍存在的,我暂时没有找到相关的原因,网上搜了一会,普遍的人称之为BUG。
基于以上原因,关于PHPBLOG的客户端缓存是以下来处理的(同时对HTTP_IF_NONE_MATCH和HTTP_IF_MODIFIED_SINCE进行判断):
PHP 代码复制到剪贴板
复制代码 代码如下:
if($_SERVER['HTTP_IF_NONE_MATCH'])
{
if($_SERVER['HTTP_IF_NONE_MATCH'] == 'phpblog')
{
header('Etag:phpblog',true,304);//控制浏览器缓存
$_SESSION['time_end']=microtime(true);
exit();
}
}
else if($_SERVER['HTTP_IF_MODIFIED_SINCE'])//eg:Sun, 02 Nov 2008 07:08:25 GMT; length=35849
{
$array=explode(' ',$_SERVER['HTTP_IF_MODIFIED_SINCE']);
$gmday=$array[1];
$month_array=array(
"Jan"=>"01",
"Feb"=>"02",
"Mar"=>"03",
"Apr"=>"04",
"May"=>"05",
"Jun"=>"06",
"Jul"=>"07",
"Aug"=>"08",
"Sep"=>"09",
"Oct"=>"10",
"Nov"=>"11",
"Dec"=>"12");
$gmmonth=$month_array[$array[2]];
$gmyear=$array[3];
$array=explode(':',$array[4]);
$gmtimestamp=gmmktime($array[0],$array[1],$array[2],$gmmonth,$gmday,$gmyear);
if(gmmktime()-$gmtimestamp<$config_client_cache_time*60*60)
{
header('Etag:phpblog',true,304);//控制浏览器缓存
$_SESSION['time_end']=microtime(true);
exit();
}
}
if($_SERVER['HTTP_IF_NONE_MATCH']) { if($_SERVER['HTTP_IF_NONE_MATCH'] == 'phpblog') { header('Etag:phpblog',true,304);//控制浏览器缓存 $_SESSION['time_end']=microtime(true); exit(); } } else if($_SERVER['HTTP_IF_MODIFIED_SINCE'])//eg:Sun, 02 Nov 2008 07:08:25 GMT; length=35849 { $array=explode(' ',$_SERVER['HTTP_IF_MODIFIED_SINCE']); $gmday=$array[1]; $month_array=array( "Jan"=>"01", "Feb"=>"02", "Mar"=>"03", "Apr"=>"04", "May"=>"05", "Jun"=>"06", "Jul"=>"07", "Aug"=>"08", "Sep"=>"09", "Oct"=>"10", "Nov"=>"11", "Dec"=>"12"); $gmmonth=$month_array[$array[2]]; $gmyear=$array[3]; $array=explode(':',$array[4]); $gmtimestamp=gmmktime($array[0],$array[1],$array[2],$gmmonth,$gmday,$gmyear); if(gmmktime()-$gmtimestamp<$config_client_cache_time*60*60) { header('Etag:phpblog',true,304);//控制浏览器缓存 $_SESSION['time_end']=microtime(true); exit(); } }
缓存的HEADER是这样来发送的:
PHP 代码复制到剪贴板
复制代码 代码如下:
$client_cache_time=$config_client_cache_time*60*60;//单位 - 秒
header('Cache-Control: public, max-age='.$client_cache_time);
header('Expires: '.gmdate('D, d M Y H:i:s',time()+$client_cache_time).' GMT');//设置页面缓存时间
header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');//返回最后修改时间
header('Pragma: public');
header('Etag:phpblog');//返回标识,用于标识上次的确访问过(浏览器中存在缓存)
$client_cache_time=$config_client_cache_time*60*60;//单位 - 秒 header('Cache-Control: public, max-age='.$client_cache_time); header('Expires: '.gmdate('D, d M Y H:i:s',time()+$client_cache_time).' GMT');//设置页面缓存时间 header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');//返回最后修改时间 header('Pragma: public'); header('Etag:phpblog');//返回标识,用于标识上次的确访问过(浏览器中存在缓存)
相关推荐:
ChatGPT页面空白无法登录?如何解决这一困扰?,温州ai字幕生成
SEO新手必看:从零开始SEO优化的终极指南,随州网站优化技巧
SEO优化的话题:助力企业成功的关键,夏杰ai智能管家
SEO学费多少钱?揭秘SEO培训的投资价值与回报!,郴州网站推广多少钱一个
在线AI文章生成:内容创作新革命
seo经理做什么的,seo经理招聘 ,盲人ai眼镜
wordpress seo是什么,wordpress建站seo好做吗 ,学习图文ai
SEO检测,让网站排名飞升的秘密武器,高端快消食品营销推广
seo需要什么人才,seo需要做什么工作 ,探索ai照片
如何识别文章是否由AI写作:技巧与方法解析
ChatGPT不登录,如何畅享AI的智能服务?,手信ai
SEO引擎优化方法-让你的网站流量暴增的实战指南,ai智慧树
在线AI文章生成器开启智能创作新时代
SEO网络营销:如何通过精准优化提升品牌价值,青州建设网站电话
ChatGPT怎么有梯子?突破网络限制,轻松畅享AI智能,ai对唱音响
为什么要年前做SEO,企业为什么做seo推广 ,云南ai大数据公司
ChatGPT免费版的限制:你需要了解的5大制约因素,Ai分解模型
SEO专业怎么样?未来发展的无限潜力与职业前景,联通ai智能早教
SEO外链建设:提升网站排名的关键策略,ai偏执
SEO要求:如何优化网站提升搜索引擎排名,助力企业获取更多流量,鹤山区网站运营推广
UCMS:引领智慧医疗新时代,打造数字化健康未来,推广工作谈营销
什么是seo网站推广,什么是seo网站推广 ,ai酷男人
seo网络推广是什么,seo网络推广是什么意思 ,ai哪里注音
优化百:开启数字时代的智能营销新时代,湘潭seo优化报价表
为什么选择老域名工具?提升网站SEO与品牌影响力的秘密武器,软文与seo文章区别
打造高效创作体验,写文章AI软件重塑内容生产力
seo需要会什么技术呢,seo需要会什么技术呢知乎 ,红色框ai
AI文章比对技术:引领写作与内容审核的新革命,ai智能写作小说免费
OpenArtAI如何进入:数字艺术的未来之门,分析海报ai
SEO优化排名:让您的网站在搜索引擎中脱颖而出,我ai 达瓦仓决
SEO详解:如何优化你的网站提升排名,获得更多流量,伊春湖南网站优化推广
SEO译为:网站排名背后的优化策略,会展中心网站优化
GPT在智能聊天机器人中的作用:重塑沟通体验,开创智能未来,百万级ai
创作新时代:自动生成文章AI的魅力与未来
【SEO优化全攻略】提升网站流量的终极秘籍,带你轻松玩转搜索引擎优化!,金融网站推广维护
为什么选择SEO会员服务,让您的网站流量飞速增长,靖边专业网站建设公司
SEO可以改变你的商业未来:如何通过优化提升网站流量和转化率,五粮液营销推广
AI缩写文本:助力智能生活的革新力量,ai智能写作生成神器下载
WP原创:打造属于你的独特网站,从这里开始!,一个网站推广一个月需要多少钱
SEO公司核心业务是什么?揭秘提升网站排名的奥秘,写作助手ai一键生成作文在线
seo都有什么问题,seo都有什么问题和答案 ,ai凯旋公主下载
SEO优化如何为网站做好关键词研究和优化,ai直通
AI助手推进:智能化时代的企业革命,ai改变图片颜色
SEM+SEO:助力企业数字化营销的双剑合璧之道,ai头像丑
文章创作AI:引领智能写作的新时代
ChatGPT宕机恢复时间如何解决用户焦虑与技术背后的故事,ai人工智能写作火山
seo网站是什么找行者SEO,seo分析网站 ,ai图文梅花
怎么查一篇文章是不是AI写的?你需要这几个关键方法!
优化入口:提升网站流量与转化率的秘密武器,琼海关键词排名品牌
SEO工装裤-打造时尚与实用兼备的工作利器,ai画中国爸爸辅导孩子写作业