-
浏览器第一次加载资源,服务器返回200,浏览器从服务器下载资源文件,并缓存资源文件与response headers,以供下次加载时对比使用。
-
下一次加载资源时,由于强缓存优先级较高,先比较当前时间与上一次返回200时的时间差,如果没有超过cache-control属性设置的max-age,则没有过期,命中强缓存,直接从本地读取资源文件。如果浏览器不支持HTTP1.1,则使用expires属性判断是否过期。
-
如果资源已过期,表明强缓存没有被命中,开始协商缓存,向服务器发送带有If-None-Match和If-Modified-Since的请求。
-
服务器收到请求后,优先根据Etag的值判断被请求的资源文件有没有做修改,Etag值一致则命中协商缓存,返回304;不一致则直接返回新的资源文件带上新的Etag值并返回200。
-
如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求资源文件的最后修改时间做比对,一致则命中协商缓存,返回304;不一致则返回新的资源文件带上新的last-modified并返回200。