参考资料文章
https://github.com/zhangguixu/sourcecode/blob/master/network/cache.md
http://www.alloyteam.com/2016/03/discussion-on-web-caching/#prettyPhoto
http://blog.jobbole.com/30940/
http://caibaojian.com/browser-cache.html
https://kb.cnblogs.com/page/92320/
http://www.cnblogs.com/Leo_wl/p/5686610.html
缓存
全称高速缓存(英文:cache,简称缓存)其原始意义是指访问速度比一般随机存取内存(RAM)快的 一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。(维基百科)
缓存就是数据交互的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快的多,故缓存的作用就是帮助硬件更快的运行。(百度百科)
总结:访问速度比一般RAM快的数据交互缓冲区
作用
总结:存储临时访问过的数据,对写入的数据进行暂时存放,缓存提高数据的读取速度
缓存分类
CPU缓存, 一级缓存, 二级缓存, 三级缓存,
超级缓存, 系统缓存, 磁盘缓存, 光驱缓存,
分布缓存, web缓存...
web缓存分类
客户端(浏览器缓存)、代理服务器、及服务器端
web缓存优点
- 减少网络流量,从而减轻拥塞。
- 降低客户访问延迟,其主要原因有:①从代理服务器获取内容从而减小了传输延迟②没有被缓存的内容由于网络拥塞及服务器负载的减轻而可以较快地被客户获取。
- 由于客户的部分请求内容可以从代理处获取,从而减轻了远程服务器负载。
- 如果由于远程服务器故障或者网络故障造成远程服务器无法响应客户的请求,客户可以从代理中获取缓存的内容副本,使得WWW服务的鲁棒性得到了加强。
web缓存缺点
- 客户通过代理获取的可能是过时的内容。
- 如果发生缓存失效,客户的访问延迟由于额外的代理处理开销而增加。因此在设计Web缓存系统时,应力求做到Cache命中率最大化和失效代价最小化。
- 代理可能成为瓶颈。因此应为一个代理设定一个服务客户数量上限及一个服务效率下限,使得一个代理系统的效率至少同客户直接和远程服务器相连的效率一样。
浏览器器缓存
浏览器缓存(BrowerCaching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。
页面的缓存状态是由http-header来决定的,一个服务器响应信息。Http的Cache机制总共有4个组成部分:
Cache-Control、Last-Modified(If-Modified-Since)、Etag(If-None-Match) 、Expires。
服务器响应头:Last-Modified,Etag
浏览器请求头:If-Modified-Since,If-None-Match
一、Cache-Control:
- max-age(单位为s)指定设置缓存最大的有效时间,定义的是时间长短。当浏览器向服务器发送请求后,在max-age这段时间里浏览器就不会再向服务器发送请求了。
我们来找个资源看下。比如shang.qq.com上的css资源,max-age=2592000,也就是说缓存有效期为2592000秒(也就是30天)。于是在30天内都会使用这个版本的资源,即使服务器上的资源发生了变化,浏览器也不会得到通知。max-age会覆盖掉Expires,后面会有讨论。
image
第一次请求,无论是静态文件还是其他文件,都是从服务器那里读取的。因此没有缓存之说。等第一次请求完,浏览器就有缓存了,然后整个的加载过程就完全不一样了。
浏览器再次请求
image
浏览器再次请求,情况就不一样了。首先会读取缓存,然后判断缓存是否过期,如果不过期,就直接读取缓存。否则,判断浏览器返回的头部信息是否存在Etag,如果存在,浏览器会像服务器发送带有If-None-Match的请求头,来和服务器返回的Etag做对比,如果if-None-Match和Etag相等。说明缓存没有更新,服务器返回304,浏览器继续从缓存读取相应的内容。如果if-None-Match和Etag不等,则服务器返回200,浏览器重新需要从服务器获取内容。
如果服务器的返回信息里面没有Etag,则判断浏览器的返回信息里是否有Last-Modified。如果有,浏览器会像服务器发送一个if-Modified-Since的请求头。然后if-Modified-Since的值会和Last-Modified的值做对比,如果if-Modified-Since的值大于等于Last-Modified,则服务器返回304,文件没有更新,直接读取缓存即可。如果if-Modified-Since
的值小于Last-Modified。则说明浏览器的缓存不是最新的,需要从服务器重新读取。如果服务器返回的头部信息既没有Etag,又没有Last-Modified,则缓存已经失效了,重新服务器抓取。
浏览器缓存优点:
- 减少了冗余的数据传输,节省了网费
- 减少了服务器的负担,大大提升了网站的性能
- 加快了客户端加载网页的速度
web(World Wide Web 互联网总称)
CND(Content Delivery Network 内容分发网络)
DNS(domain name system 域名系统)
TCP/IP(transmission control protocal/Internet protocol
传输控制协议/互联网协议)
网友评论