HTTP的场景实践:分析chrome请求中的缓存策略 | 青训营

61 阅读3分钟

分析请求中的缓存策略

今天分析的环境是chrome浏览器最新版本,分析的具体网址是juejin.cn/post/725921… ,使用的具体工具是chrome自带的network工具。 注:已勾选Disable Cache,故每次刷新均为最新获取到的信息。

前置说明

在写这篇文章之前,我一直以为缓存策略是fetch,xhr,ping这些,后面查找资料发现并不是这些。 而是根据缓存位置分为四种,并且各自有优先级,当依次查找缓存且都没有命中的时候,才会去请求网络。那么只能发起请求来获取资源了。也就是上面的fetch等方式。

  • Service Worker
  • Memory Cache
  • Disk Cache
  • Push Cache

刷新页面后,network出现了这样的界面,

image.png可以看出来以上四个均为Memory Cache中加载出来的缓存,并非请求得到的。

image.png然后稍微往下翻一点就会发现加载的这个类型为document的,里面包含的内容就是页面中的文字。

image.png 从这里可以看出请求方法为get,状态码为200,然后服务器的地址为219.144.98.229,查了一下是陕西电信的服务器,这里应该是使用了CDN,不然不可能这么近吧。由于这是缓存,我看不见具体的信息,所以我换了一个list。

image.png Cache-Control: 这是一个非常重要的缓存控制头部字段,它指定了资源的缓存行为。一些常见的 Cache-Control 值包括:

  • must-revalidate:在上图中存在,这里因为这个值比较难解释,所以引用这篇文章解释一下,但是我还一下没看懂,理解的就是这个和no-cache不同,他是为了防备过期缓存被使用的。
  • public:响应可以被任何缓存(包括浏览器和代理服务器)缓存。
  • private:响应只能被浏览器缓存,不应被代理服务器缓存。
  • no-cache:表示浏览器在使用缓存之前必须先确认响应是否仍然有效。(出现了)
  • no-store:指示浏览器不应缓存响应,每次都要从服务器获取。(出现了)
  • max-age:指定响应应该在缓存中保持多长时间(以秒为单位)。

Expires: 这是一个过时的头部字段,但仍然被一些服务器使用。它表示响应的过期日期和时间,浏览器将在此日期之后重新请求资源。(因为我的设置,所以为0)

ETag: 由服务器生成的唯一标识符,用于验证资源是否已更改。如果服务器响应包含 ETag,浏览器在下一次请求时可以通过 If-None-Match 头部字段将 ETag 发送回服务器,以检查资源是否已更改。

Last-Modified: 服务器指示资源的最后修改日期。浏览器可以在下一次请求时通过 If-Modified-Since 头部字段将上次响应的最后修改日期发送回服务器,以检查资源是否已更改。

机制优先级

不同的缓存机制也会冲突,这时候就会有一个优先级了,限于文章篇幅限制,引用一篇文章来解释

最后

如果8月初不做决定去送外卖,这个月是否就会拿到结营证书呢,这次不顾家人的劝阻去读计算机第二学位会不会有一个好的结局呢,好想知道啊。大学四年后,我又提着满满当当的一包遗憾去开始新的人生了。