强缓存和协商缓存

146 阅读2分钟

强缓存跟协商缓存

两者概念

首先我们要知道他们是干什么用的?要运用在哪里?什么时候使用这些?

 这两个都是浏览器的一种缓存机制,他们时常一起配合使用。
 
 常用于客户端请求服务器之后,为了避免重复数据的请求,让客户端直接调用本地缓存

强缓存

强缓存通过设置服务端返回的响应头中设置Expires (过期时间)来控制缓存时间

当你使用强缓存时,你就得在响应头当中设置一个缓存的过期时间,在这个时间内,再次发起请求时不会直接访问服务器而是通过调用缓存来拿到数据。

举个栗子🌰:

我现在又刚买了一堆苹果,你问我要了一个,在我给你的时候我告知了你这个苹果的腐烂时间之前都可以吃(这个就是相当于设置了缓存的过期时间),然后你在这个苹果没有腐烂之前都是可以吃的,就不要来询问(发请求)我这个苹果是否能吃。

协商缓存

在本地没有缓存数据时,第一次访问服务器时会在响应头中返回一个时间,这个时间是数据最后一次修改的时间,然后下一次要请求时在请求过程中请求头中会带有一个时间(上一次数据发生改变的时间),对比一下是否两个时间是不是一样的,判断数据是否有改变,如果改变了数据之后会更新最后修改的时间并更新数据,这个过程中至少与服务器通信一次,没有改变的话就通知它调用本地缓存。

还是一个栗子🌰:

还是这一堆苹果,你问我要了一个,现在我不告诉你腐烂时间了,我只告诉你我是什么时候买的。每次要吃的的时候(假装看不见有没有腐烂),你就要跑过来问我一次这个苹果到底腐烂没有,如果腐烂了我就给你重新拿个我刚买的,并告知你我购买的时间。

那么现在就有疑问了? 为什么有强缓存了还有协商缓存

微信图片_20230523170156.gif

为的就是一个保底,两者可以同时使用

原因

因为强缓存在过期的一瞬间要对服务器再次进行请求,如果这个时候涌入大量的访问,那么就会造成服务器压力过大而崩溃,这是一个不好的现象———“缓存雪崩”。

但是有了协商缓存兜底的时候,就会避免这种结果。