HTTP缓存有多种规则,根据是否需要向服务器重新发起请求来分类,将其分为强制缓存,对比缓存。
1.强制缓存:判断HTTP首部字段:Expires 和 cache-control。
Expires是一个绝对时间,即服务器时间。浏览器检查当前时间,如果还没到失效时间就直接使用缓存文件。但是该方法存在一个问题:服务器时间与客户端时间可能不一致
cache-control中的max-age保存了一个相对时间。例如Cache-Control: max-age = 484200,表示浏览器收到文件后,缓存在484200s内有效。 如果同时存在cache-control和Expires,浏览器总是优先使用cache-control。
2.对比缓存:通过HTTP的 last-modified(最新-改进),Etag字段进行判断。
last-modified 表示请求的URL(资源)最后一次更新的时间。下一次浏览器请求资源时就发送if-modified-since字段。服务器用本地Last-modified时间与if-modified-since时间比较,如果不一致则认为缓存已过期并返回新资源给浏览器;如果时间一致则发送304状态码,让浏览器继续使用缓存。
Etag:资源的实体标识(哈希字符串),当资源内容更新时,Etag会改变。服务器会判断Etag是否发生变化,如果变化则返回新资源,否则返回304。