HTTP 缓存

80 阅读2分钟

HTTP 缓存

先上一张HTTP缓存的思维导图

1.png

流程总结:

在浏览器再次访问一个之前已经访问过的资源时,会先判断该资源是否命中强缓存,也就是根据Expries和Catch-Control这两个头部字段信息。如果命中强缓存,就直接读取本地中的缓存去获取资源,不会向服务器发出请求。如果没有命中强缓存,那么就会向服务器发出一个请求,验证是否命中协商缓存(请求头中会带上If-Modify-Since/If-None-Match头字段(如果响应头中有带上对应的Last-Modify/ETag头字段的话)。然后服务器会根据If-Modify-Since/If-None-Match字段带过去的值去判断是否命中协商缓存)。如果命中协商缓存,服务器会响应304,告诉浏览器可以使用本地缓存资源,如果没有命中协商缓存,服务器就响应新的资源给浏览器,浏览器再接受新的资源,把新的资源再缓存起来,方便下次使用。

资源的缓存位置

memory catch

内存中缓存,也就是把资源缓存在内存中,当当前的进程被关掉后,内存就会被清空,缓存的资源也就没有了。

disk catch

磁盘缓存,也就是把资源缓存在本地的硬盘中。

缓存读取优先级

浏览器在需要读取缓存资源的时候,会先在内存中去读取,内存中读取失败的话,再去磁盘中读取,磁盘中也找不到的话,就会去发送请求获取新资源,然后再把新资源缓存到硬盘和内存中。

怎么看命中哪种缓存类型?

在控制台的Network中,看接口的响应Headers详情信息可以看到(下面截图是谷歌浏览器):

fe67fee3194f613191415ceb6bc40a6.jpg

image.png

参考文献

juejin.cn/post/684490…

其他

Content Delivery Network(内容分发网络)

image.png

image.png

image.png