美文网首页
关于浏览器的缓存机制

关于浏览器的缓存机制

作者: 叶文徵 | 来源:发表于2019-03-13 23:41 被阅读0次

Cache-Control:no-cache

当我们页面发起请求,服务端返回给浏览器response header,里面通常会包括cache-control,Last-Modified等信息;

而cache-control通常会设置为no-cache;

Cache-Control:no-cache 的意思是不使用缓存,但是还是会被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性;

服务器接受到请求时,就会校验资源是否要修改;

刷新动作返回 304 状态码 与 Last-Modified

  • 当客户端有刷新动作时或者强刷时,就会像服务器咨询服务端是否有修改,此时的请求头是带有If-Modified-Since:上次浏览器更新的版本的;

  • 服务器收到请求,会根据请求头的If-Modified-Since 和 本地文件的修改时间做对比,如果没有修改就返回304,如果有修改就返回200

etag

单纯的以修改时间来判断还是有缺陷,比如文件的最后修改时间变了,但内容没变。对于这样的情况,我们可以使用etag来处理。

etag的方式是这样:服务器通过某个算法对资源进行计算,取得一串值(类似于文件的md5值),之后将该值通过etag返回给客户端,客户端下次请求时通过If-None-Match或If-Match带上该值,服务器对该值进行对比校验:如果一致则不要返回资源。
If-None-Match和If-Match的区别是:

If-None-Match:告诉服务器如果一致,返回状态码304,不一致则返回资源

If-Match:告诉服务器如果不一致,返回状态码412

expires

缓存过期其实缓存文件是没有删除的,所以你会看到现象expires时间有时候会比当前时间还小怎么没有200,实际上是它发头信息上去对比结果服务器上结果还是没有修改,所以还是返回304状态读取了本地缓存.

Expires 有缺点,比如说,服务端和客户端的时间设置可能不同,这就会使缓存的失效可能并不能精确的按服务器的预期进行

no-store优先级最高

在Cache-Control 中,这些值可以自由组合,多个值如果冲突时,也是有优先级的,而no-store优先级最高。

重复刷新访问,会发现每次的状态码都是200,原因是no-store的优先级最高,本地不保存,每次都需要服务器发送资源

Ctl+F5

Ctrl+F5要的是彻底的从Server拿一份新的资源过来,所以不光要发送HTTP request给Server,而且这个请求里面连If-Modified-Since/If-None-Match都没有,这样就逼着Server不能返回304,而是把整个资源原原本本地返回一份,这样,Ctrl+F5引发的传输时间变长了,自然网页Refresh的也慢一些。我们可以看到该操作返回了200,并刷新了相关的缓存控制时间。

FonZrh_J5auduA4JaqZKW9hZqXrG.png

实际上,为了保证拿到的是从Server上最新的,Ctrl+F5不只是去掉了If-Modified-Since/If-None-Match,还需要添加一些HTTP Headers。按照HTTP/1.1协议,Cache不光只是存在Browser终端,从Browser到Server之间的中间节点(比如Proxy)也可能扮演Cache的作用,为了防止获得的只是这些中间节点的Cache,需要告诉他们,别用自己的Cache敷衍我,往Upstream的节点要一个最新的copy吧。
在Chrome 51 中会包含两个头部信息, 作用就是让中间的Cache对这个请求失效,这样返回的绝对是新鲜的资源。

状态码 200 from cache

浏览器发现该资源已经缓存了而且没有过期

浏览器缓存常见问题及解释

1. 问题:缓存多久是看浏览器传给服务端的头信息还是返回来的头信息?

是看服务器返回来的头信息Cache-Control,意思是服务器告诉浏览器需要缓存多久,对于缓存相关的头信息,Response Header 是告诉浏览器你要对缓存做什么比如缓存多久;如果服务器对请求头的信息有处理另说;

2.本地缓存过期看到过期时间比当前时间都早,还是返回304

原因:为本地缓存过期之后向服务器请求,服务器资源没有变化导致(If-Modified-Since和Last-Modified对比),其实这里还是读的本地缓存,过期不代表被删除了。

304 vs 200 from cache

304是指资源已经过期了,并且去服务器请求,服务器在检验完Last-Modified 与 etag 后告诉浏览器,没有更新,请继续使用本地缓存

200 from cache 服务器上次返回告诉浏览器过期时间,缓存没过期,不去服务器请求,继续使用本地缓存;

参考:

浅谈http中的Cache-Control

HTTP缓存控制小结

浅谈浏览器http的缓存机制

相关文章

  • 【转载】彻底理解浏览器的Http缓存机制

    转自:彻底理解浏览器的缓存机制(http缓存机制) 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是...

  • 让我们学习了解浏览器的缓存,提高页面的流畅度

    浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制...

  • 浏览器缓存机制

    浏览器缓存机制:浏览器缓存机制,其实主要就是http协议定义的缓存机制(如:Expires;Cache-contr...

  • Web浏览器的缓存机制

    原文转载【Web缓存机制系列】2 – Web浏览器的缓存机制 浏览器端的缓存规则 对于浏览器端的缓存来讲,这些规则...

  • 2020-08-14 彻底理解浏览器的Http缓存机制

    彻底理解浏览器的Http缓存机制 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的...

  • http的缓存机制(个人笔记)

    本文来源:彻底理解浏览器的Http缓存机制 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HT...

  • nginx 缓存(11)

    介绍nginx是如何设置缓存之前,我们还是先聊聊web浏览器的缓存机制。 1.浏览器缓存 浏览器的缓存机制也就是我...

  • js浏览器相关

    缓存 关于缓存的好处与优点就不说了,简单说说浏览器的缓存机制。当浏览器向服务器发起请求时,首先会判断是否有缓存,如...

  • http 缓存机制

    概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓...

  • 浏览器缓存

    浏览器的缓存机制 浏览器的缓存机制实际上就是HTTP缓存机制,其实就是根据请求报文中的缓存标识符进行识别然后进一步...

网友评论

      本文标题:关于浏览器的缓存机制

      本文链接:https://www.haomeiwen.com/subject/elffmqtx.html