缓存将根据请求保存输出内容的副本,例如页面,图片和文件。当下一个请求到达时,如果它是相同的URL,则缓存将直接使用本地副本来响应访问请求,而不是再次将其发送到原始服务器。发送请求。
缓存机制第一个浏览器请求

第二个请求

从以上两张图片中,我们可以清楚地了解浏览器缓存的过程

第一行
当浏览器再次访问URL时,它将首先获取资源的标头信息,以确定它是否到达了强缓存。如果命中,它将直接从缓存中获取资源,包括响应头信息(请求将不与服务器通信)。也就是说,强大的缓存

第二条路线
如果未命中强缓存,浏览器将向服务器发送请求,并且请求将携带有关缓存的标头信息(上次修改/如果修改过-自从和Etag /如果不进行匹配)由请求返回。服务器根据请求中的相关标头信息比较结果,以协商缓存命中。如果命中,服务器将返回新的响应标头信息***更新缓存中的相应***标头信息***,但不返回资源内容,它将通知浏览器它可以直接从缓存中获取它;否则,它将返回最新的资源内容,即***协商缓存***


有两个与强缓存有关的标头字段
到期
这是** http 1. 0的规范,其值是GMT格式的绝对事件时间字符串,例如Mon,10Jun201521:31:12GMT。如果发送请求的时间是在过期之前,则本地缓存始终有效,否则它将向服务器发送请求以获取资源
缓存控制
cache-control:max-age = number,这是出现在http 1. 1中的头信息,主要使用该字段的max-age来判断,它是一个相对值;资源是第一次。计算由Cache-Control设置的请求时间和有效期以计算资源到期时间,然后将该到期时间与当前请求时间进行比较。如果请求时间早于到期时间,则它可能会到达缓存,否则会丢失,缓存-除此字段外,控件还具有以下更常用的设置:
提示:如果同时存在缓存控制和过期,则缓存控制的优先级高于过期

协商缓存
协商缓存由浏览器和服务器协商以确定是否要缓存。协商主要使用以下两组头字段。这两组字段成对出现,即第一个请求的响应标头具有某个字段(Last-Modified或ETag),后续请求将带来相应的请求字段(If-Modified-Since或If-None) -Match),如果响应标头中没有Last-Modified或ETag字段,则请求标头中将没有。
最后修改/如果修改过
两者的值都是GMT格式的时间字符串,具体过程为:Etag / If-None-Match
这两个值是服务器生成的每个资源的唯一标识字符串。只要资源更改,此值就会更改;判断过程类似于Last-Modified,If-Modified-Since和Last-Modified。区别在于,当服务器返回304时,由于Etag已被重新生成,因此响应标头将返回此Etag,即使Etag具有与上一个保持不变
提示:Last-Modified和ETag可以一起使用,服务器将首先验证ETag,并且只有在它们一致时才比较Last-Modifed
Modified和ETag可以一起使用,服务器将首先验证ETag,并且如果它们一致,则仅比较Last-Modifed
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-377598-1.html
有爱国的国民
luna