浏览器缓存主要分为强缓存(也称本地缓存)和协商缓存(也称弱缓存)。

浏览器请求某一资源时,会先获取该资源缓存的header信息,然后根据header中的Cache-Control和Expires来判断是否过期。若没过期则直接从缓存中获取资源信息。

如果过期,浏览器会向服务器端发送请求,这个请求会携带第一次请求返回的有关缓存的header字段信息。浏览器会首先将缓存标识(Etag)发送给服务器,服务器拿到标识后判断标识是否匹配,如果不匹配,表示资源有更新,服务器会将新数据和新的缓存标识一起返回到浏览器;如果缓存标识匹配,表示资源没有更新,并且返回 304 状态码,浏览器就读取本地缓存服务器中的数据。