浏览器发起第一次请求,加载资源文件,服务器返回200,浏览器缓存资源文件和response header;
再一次加载资源,浏览器发起请求,由于强缓存的优先级比较高,先比较当前时间和上一次返回200时的时间差,如果没有超过cache-control的max-age的值,则没有过期,命中强缓存,直接使用本地缓存资源。如果浏览器不支持http1.1,则使用expires判断是否过期;
如果过期,则开始协商缓存,则向服务器发送带有if-None-match(带Etag值)和if-modified-since(带last-modified值)的请求,优先比较Etag的值是否一致,如果一致命中协商缓存,服务器返回304,不一致的话,服务器返回新的资源文件带上新的Etag值并返回200;
如果没有Etag值,则比较if-modified-since是否一致,如果一致命中协商缓存,服务器返回304,不一致的话服务器发送新的资源带有新的last-modified并返回200;