浏览器的缓存机制

缓存对访问资源时的速度提升有着重要的作用

缓存的概念,在计算机组成原理中用到过,一种硬件:cache

在浏览器访问服务器资源的过程中,也经常用到缓存机制。

整个缓存机制有几个阶段:本地缓存,协商缓存,页面缓存。

本地缓存阶段:

就是检查本地缓存文件中是否有要访问的页面资源<不同浏览器有不同检查本地文件的方式>

若无缓存:那肯定会发送请求到服务器,然后得到资源。

若有缓存:那肯定直接取自己的,减少访问时间,快速得到资源。但是在拿到这个资源的时候,会有个问题,资源是不是最新的内容。

<判断是否过期>那如何判断呢?在缓存的响应文件里,有一个关键字:expires。这个表示这个文件的过期时间ps:既然有本地缓存,那肯定是访问过该资源的。人家服务器比较贴心,在第一次响应中还加上了一个文件的保质期,让浏览器再次用该缓存资源时候看看保质期,防止吃过期食品。但是expires表示的是服务器时间,万一与客户端时间不同怎么办?最新的http协议中改进了这个,增加了cache-control这个响应头,增加了max-age字段,来讲明:超过这个时间s就会失效。优先级比expires高>

协调缓存阶段:

若不过期:那就直接在本地缓存中用。

若已过期:那肯定要去服务器发送请求,表示自己想要最新资源。但是注意这个时候,请求会带上if-last-modified字段,这个是什么呢?在缓存中显示的该资源最近被修改时间。资源最近的被修改时间,浏览器怎么知道的?肯定是缓存资源本身带的,在第一次的响应时,服务器响应头就加上了last-modified字段,浏览器缓存时候就保存了这个信息请求中的这个字段和服务器资源中最新的资源修改时间进行比较但是问题又来了,万一资源确实最近又被修改了,但是内容一点点都没变,和浏览器缓存中的一毛一样怎么办?不想再浪费时间进行传输了。那好http又提供了一个新的Etag字段。该字段是资源在服务器中的唯一标识,由文件的索引节,文件大小,修改时间组成,它存在于文件的响应头。在再次请求时,会带上if-none-match(其内容就是Etag)来进行比较服务器资源的Etag值。所以同时存在last-modified时,优先比较Etag。

若Etag/last-modified新:服务器响应304,直接用浏览器中的缓存资源。

若Etag/last-modified旧:服务器响应200,把服务器中最新资源发过来。


说一点页面缓存:网页文档分为3种:静态文档<html>,动态文档<jsp>,活动文档<js>

动态文档,是一种服务端程序,他会在接受请求的时候被执行,程序执行结果作为响应返回。

若过多次请求都一样,那么动态文档运行结果也一样。那么请求一次,服务器就运行程序一次,这样就会很浪费性能。

怎么解决呢?

把一次的动态文档的结果作为一种静态文档,保存在服务器缓存中,每次遇到相同的请求时,就把它返回过去,没必要再次执行。


以后再学一个小知识点时,必须要弄懂弄透彻,能用自己的话讲出来教别人,这才能算学会。

最近,在学j2ee和Jvm和算法,并且操作系统,计网,计组要复习!累啊累啊累啊!



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值