第一次浏览器请求资源时:
根据 强缓存Expires、Cache-Control 和协商缓存 Last-Modified、 Etag 来判断是否需要进行缓存
浏览器再次进行资源请求时:
会先判断强缓存是否过期,如果没有过期,则直接读取缓存,这个时候返回状态码就是 200(from disk)。如果过期了,则通过协商缓存给服务器发送请求,服务器来判断资源是否有改变, 如果有改变,则200返回新内容, 如果没有改变,则返回304状态码,告诉浏览器资源内容没有改变,请从本地缓存读取
最后附属一张图来总结:
强缓存expires和cache-control同时存在时,则cache-control会覆盖expires,expires无论有没有过期,都无效。 即:cache-control优先级 > expires优先级。
对比缓存Etag和Last-Modified同时存在时,则Etag会覆盖Last-Modified,Last-Modified不会生效。即:ETag优先级 > Last-Modified优先级。