登录  /  注册
首页 > php教程 > php手册 > 正文

php 浏览器缓存

php中文网
发布: 2016-05-25 16:38:47
原创
3858人浏览过

浏览器缓存,就完全不是那么回事了,缓存内容存储在浏览器本地,而内容却由web服务器生成,任何一方都不可能独立完成这一系统过程,所以它们之间必须有一种沟通机制,这就是http中的“缓存协商"。

我们先来看一个通常的http请求:

host   www.phprm.com 

user-agent         mozilla/5.0 (windows; u; windows nt 6.1; zh-cn; rv:1.9.2.9) gecko/20100824 firefox/3.6.9        firephp教程/0.4 

accept         text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

accept-language         zh-cn,zh;q=0.5 

accept-encoding         gzip,deflate 

accept-charset         gb2312,utf-8;q=0.7,*;q=0.7 

keep-alive         115 //开源代码phprm.com 

connection         keep-alive 

上面就是一个普通的http请求,为了实现在浏览器缓存控制,我们需要了解http响应头中的四种标记:

last-modified:最后修改gmt时间

etag:通过一串编码来标记内容是否更改过

expires:指定一个过期gmt时间

cache-control:mag-age=相对于浏览器本地的过期秒数,可避免服务器时间不正确的情况下同样起作用.

http返回的状态代码:

200——请求成功

304——客户端已经执行了get,但文件未变化

400——错误请求,如语法错误

500——服务器产生内部错误

501——服务器不支持请求的函数

以下代码使用了以上四种方法来控制浏览器内容缓存一个小时,如果在一小时之内则立即返回304状态码通知浏览器使用本地的内容,这将节省服务器程序执行时间,网络传输时间,仅返回一个头文件.

$modified_time = $_server['http_if_modified_since']; 
if (strtotime($modified_time) + 3600 > time()) { 
header("http/1.1 304"); 
exit(0); 
} 
header("last-modified:" . gmdate("d, d m y h:i:s") . "gmt"); 
header("expires:" . gmdate("d, d m y h:i:s", time() + 3600) . "gmt"); 
header("cache-control: max-age=3600");
登录后复制

特别需要说明一下的是:expires需要服务器商支持expires模块默认情况下是不会开启,使用以下命令即可:

a2enmod expires         //启用expires模块 
/etc/init.d/apache2 restart        //重启apache服务
登录后复制

我们还可以通过修改http.conf配置中:

expires active on expiresbytype image/gif "access plus 1 month" expiresbytype text/css "now plus 2 day" expiresdefault         "now plus 1 day"
登录后复制

以上是针对静态内容的mime类型来设置过期时间,因为我们无法给静态文件直接指定一个绝对到期时间,所以采用"access plus"式的语法,由web服务器在该内容被请求的时候动态计算一个绝对到期时间,作为expires标记的内容.

值得一提的是,对于常见的静态文件格式,即便是web服务器返回http响应头中没有expires标记,浏览器也会根据一些其它线索猜测一个过期时间,比如ie在某种缓存模式下,对于gif图片设置为永不过期,除非我们配置expires为马上过期,也就是将过期时间设置为当前时间或者0.


教程链接:

随意转载~但请保留教程地址★

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号