强缓存

强缓存只要是通过http头部两个字段expires和chache-control来进行控制,用来表示资源缓存的时间。
头部字段expires: 是http1.0时候的规范它的值是一个格林威治时间格式的字符串,可以理解为一个过期时间,如果请求发在过期时间之前,那么缓存始终有效,否则发请求向服务器获取资源。
头部字段cache-control: max-age =number 它是http 1.1 中出现对的头部信息,浏览器会拿到max-age值和第一次请求的时间计算出一个过期时间,再拿这个过期时间和当前请求的时间对比较。如果在过期时间之前则命中缓存,否则发送请求向服务器获取资源

注: cache-control 和 expires同事存在的话,前者的优先级会大于后者

协商缓存

协商缓存是通过服务器来判断缓存资源是否可用,所以客户端和服务器需要某种标识进行通信,从而让服务器判断是否继续使用缓存资源。
这里涉及两组header字段: Etag/if-none-match、 last-modified/if-modified-since
向服务器发送请求,服务器会通过这些请求头字段进行判断是否命中协商缓存。

强缓存和协商缓存的优先级

如果强缓存和协商缓存同时存在,且强缓存没有过期,则使用强缓存。