通过HTTP / 1. 1,Expire已被Cache-Control取代。原因是Expires通过将客户端的时间与服务器返回的时间进行比较来控制缓存。如果客户端和服务器之间的时间为某些原因(例如,时区不同;客户端和服务器的时间不准确),则强制缓存将直接失效。在这种情况下,强制缓存的存在是没有意义的,那么Cache-Control如何控制它?什么?
缓存控制
在HTTP / 1. 1中,缓存控制是最重要的规则,主要用于控制网页缓存。主要值是:
接下来,让我们直接看一个示例,如下所示:


从上面的示例中,我们可以知道:
由于Cache-Control的优先级高于过期优先级,因此缓存直接基于Cache-Control的值,这意味着如果请求在600秒内再次启动,则缓存的结果将直接用于强制缓存生效。
注意:当无法确定客户端的时间是否与服务器的时间同步时,Cache-Control是一个比过期更好的选择,因此,当两者同时存在时,只有Cache-Control才能生效。
在了解了强制缓存的过程之后,让我们对其进行广泛的思考:
浏览器的缓存存储在哪里,如何确定强制性缓存在浏览器中是否有效?


这里我们以博客请求为例。状态码为灰色的请求表示使用了强制高速缓存,并且与请求相对应的大小值表示高速缓存的位置,分别来自内存高速缓存和磁盘高速缓存。

那么,内存缓存和磁盘缓存分别代表什么?何时使用磁盘缓存和内存缓存?
来自内存高速缓存的
表示使用内存中的高速缓存,而来自磁盘高速缓存的
表示使用硬盘中的高速缓存。浏览器读取缓存的顺序是内存->磁盘。
尽管我已经直接说明了结论,但我相信很都无法理解这一点,因此,让我们一起详细分析缓存读取问题。让我们以我的博客为例进行分析:
访问heyingye.github.io/-> 200->关闭博客选项卡页面->重新打开heyingye.github.io/-> 200(从磁盘缓存中)->刷新-> 200(从内存缓存中获取
过程如下:






看到一些朋友可能在这里问,当最后一步刷新时,磁盘缓存和内存缓存中是否同时存在?
对于此问题,我们需要了解内存缓存(从内存缓存)和硬盘缓存(从磁盘缓存),如下所示:
在浏览器中,浏览器将在解析并执行js和图片后将文件直接存储在内存缓存中,因此刷新页面时,仅需要直接从内存缓存(从内存缓存)读取页面;而css文件将存储在硬盘文件中,因此,每次渲染页面时,都需要从硬盘(从磁盘缓存)读取缓存。
协商缓存
缓存协商是一个过程,在该过程中,浏览器携带缓存标识符,以在迫使缓存过期后向服务器发起请求,然后服务器根据缓存标识符来决定是否使用缓存。主要有两种情况:




同样,协商缓存的标识符也返回到浏览器,请求结果在响应消息的HTTP标头中。控制协商缓存的字段是:Last-Modified / If-Modified-Since和Etag / If-None-Match,其中Etag / If-None-Match的优先级高于Last-Modified / If-Modified-Since。
最后修改/如果修改后





Etag /如果不匹配




注意:Etag / If-None-Match的优先级高于Last-Modified / If-Modified-Since,如果同时存在,则只有Etag / If-None-Match才有效。
摘要
强制缓存优先于协商缓存。如果强制缓存(Expires和Cache-Control)生效,则直接使用该缓存;如果不生效,则协商缓存(Last-Modified / If-Modified-Since和Etag / If-None)-Match),协商缓存由服务器确定是否使用该缓存,如果协商缓存无效,则请求的缓存无效,取回请求结果,然后存储在浏览器缓存中;如果生效,则返回304,并继续使用缓存,主要过程如下:


以上是浏览器缓存的过程。如果有任何错误,请纠正我。
原始链接:
叶颖颖的个人网站

本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-377600-1.html
考虑去演戏吧