强缓存和协商缓存的区别

强缓存

强缓存是当缓存的资源仍然有效的情况下,浏览器不会向服务器发送请求,而是直接使用缓存资源。怎么判断强缓存的资源是否有效呢?

  1. 在HTTP1.0中使用HTTP头部的expires来判断缓存是否过期。但是它有一些问题,就是expires是绝对时间,也就是服务器的时间,如果客户端和服务端的时间不一样,就会导致强缓存命中不了的情况。

  2. 在HTTP1.1中是使用的cache-control来判断强缓存是否过期,在cache-control中可以设置一些属性,关于强缓存有关的属性有no-cache不进行强缓存,但是进行协商缓存,no-store不进行缓存,每次请求都向服务器请求最新数据,max-age设置缓存的最大有效值,单位为秒。浏览器正式使用max-age来判断缓存是否有效的。如果上次请求返回的200状态码的时间距离这次请求的时间超过max-age那么就没命中强缓存。

协商缓存

当没命中强缓存的时候就是进行协商缓存,进行协商缓存的时候,浏览器会携带if-None-Match和if-Modified-Since向服务器发送请求,发送的请求如果有Etag值,那么就判断Etag值和当前资源的Etag值是否相同,如果相同则使用缓存资源,返回304。如果不同则返回新的资源,并携带新的Etag和last-Modified,如果没有Etag值就判断if-Modified-Since和服务器中资源上次的修改时间是否相同,如果相同就使用缓存值返回304,如果不相同就返回新的资源,并携带新的Etag和last-Modified。