注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

PHP中添加Last-Modified,ETag属性代码来优化性能  

2017-10-10 11:40:06|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Last-Modified参数在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是请求的资源,同时有一个Last-Modified的标记此文件在服务期端最后被修改的时间,格式类似这样:Last-Modified Tue, 29 Mar 2016 09:34:19 GMT
如果客户端再次请求此URL时,根据http协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:If-Modified-Since Tue, 29 Mar 2016 09:34:19 GMT, 如果资源没有变化,则自动返回 http 304(Not Changed)状态码,内容为空,这样就节省了传输数据量[相当于节省了流量并提高了性能]。但是,默认动态页面(php,asp...)中是不会生成Last-Modified 属性的,只能自己手动来添加Last-Modified 属性值。

<?php
function genlastModified ($addtime){
$lastModified = time() + $addtime;
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT');
}
genlastModified (3600); //这里可正可负,以秒计算
?>

请记住,如果是正数,就代表明该网页一直都比客户端缓存的至少新,那么每次重复请求都会取最新值。如果是负数,那么就代表服务器端的网页比客户端缓存的要旧,这样请求就不用再重要发送页面内容,可以用来节省带宽。
除此之外,还有一个ETag,http协议说明定义ETag为“被请求变量的实体标记”,也同样可以来使用提高性能。先根据文件名与内容更新时间生成etag,与客户端的数据做对比,如查看客户端浏览器的Last-Modified,对比etag等,如果相等,就输出304,停止输出最新数据。

<?php
function echo_last_etag($addtime){
global $_SERVER;
$etag = '"' .md5($_SERVER['PHP_SELF'].$addtime) . '"';//利用地址加时间生成etag
header('Last-Modified: '.gmdate('D, d M Y H:i:s',$addtime).' GMT');
header("ETag: $etag");
if((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $addtime) || (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) < $addtime) || (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)){
header("HTTP/1.1 304 Not Modified"); //直接输入出304,无需输出内容
exit(0);
}
}
echo_last_etag(3600); //此段代码加入动态页面即可
?>

结合以上原理,扩展到其它动态语言并不难,大家赶紧来优化自己的网站吧。
  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017