正文:缓存技术:在介绍缓存技术之前,我们先看一张lamp网站的价格图,通过架构图我们可以很清晰的对网站整体缓存有一定认识
下面是一张lamp缓存图:
lamp缓存图
从图中我们可以看到网站缓存主要分为五部分
服务器缓存:主要是基于web反向代理的静态服务器nginx和squid,还有apache2的mod_proxy和mod_cache模块
浏览器缓存:包括页面html缓存和图片js,css等资源的缓存
php缓存:有很多免费的php缓冲加速工具,如apc eaccerlertor等
内存缓存:主要是采用memcache这种分布式缓存机制
数据库缓存:通过配置数据库缓存,以及数据存储过程,连接池技术等
下面重点介绍浏览器缓存原理:自己的语言表达能力有限,还是先看图,比较直观也比较简洁:
从上图:我们可以知道浏览器缓存重要分为两个部分:
页面html的缓存
图片,css,js,flash等缓存
浏览器缓存是基于把页面信息保存到用户本地电脑硬盘里,服务器缓存是基于把用户访问的页面保存到服务器上的硬盘里
先介绍页面缓存的原理页面缓存状态是由http header决定的,一个浏览器请求信息,一个是服务器响应信息。主要包括pragma: no-cache、cache-control、 expires、 last-modified、if-modified-since。其中pragma: no-cache由http/1.0规定,cache-control由http/1.1规定。
自己画的工作原理图:
从图中我们可以看到原理主要分三步:
第一次请求:浏览器通过http的header报头,附带expires,cache-control,last-modified/etag向服务器请求,此时服务器记录第一次请求的last-modified/etag
再次请求:当浏览器再次请求的时候,附带expires,cache-control,if-modified-since/etag向服务器请求
服务器根据第一次记录的last-modified/etag和再次请求的if-modified-since/etag做对比,判断是否需要更新,然后响应请求
相关参数说明;
cache-control的主要参数
cache-control: private/public public 响应会被缓存,并且在多用户间共享。 private 响应只能够作为私有的缓存,不能再用户间共享。
cache-control: no-cache:不进行缓存
cache-control: max-age=x:缓存时间 以秒为单位
cache-control: must-revalidate:如果页面是过期的 则去服务器进行获取。
expires:显示的设置页面过期时间
last-modified:请求对象最后一次的修改时间 用来判断缓存是否过期 通常由文件的时间信息产生
if-modified-since :客户端发送请求附带的信息 指浏览器缓存请求对象的最后修改日期 用来和服务器端的last-modified做比较
etag:etag是一个可以 与web资源关联的记号(token),和last-modified功能才不多,也是一个标识符,一般和last-modified一起使用,加强服务器判断的准确度
关于图片,css,js,flash的缓存这个主要通过服务器的配置来实现这个技术,如果使用apache服务器的话,可以使用mod_expires模块来实现:
编译mod_expires模块:
cd /root/httpd-2.2.3/modules/metadata
/usr/local/apache/bin/apxs -i -a -c mod_expires.c //编译
编辑httpd.conf配置:添加下面内容
<ifmodule mod_expires.c>expiresactive onexpiresdefault "access plus 1 month"expiresbytype text/html "access plus 1 months"expiresbytype text/css "access plus 1 months"expiresbytype image/gif "access plus 1 months"expiresbytype image/jpeg "access plus 1 months"expiresbytype image/jpg "access plus 1 months"expiresbytype image/png "access plus 1 months"expiresbytype application/x-shockwave-flash "access plus 1 months"expiresbytype application/x-javascript "access plus 1 months"#expiresbytype video/x-flv "access plus 1 months"</ifmodule>
解释:第一句--开启服务
第二句--默认时间是一个月
在下面是关于各种类型的资源的缓存时间设置
推荐学习:php视频教程
以上就是详细介绍让网站飞起来的浏览器缓存技术的详细内容。
