http缓存分为强制缓存和协商缓存。强制缓存是浏览器通过查询cache-control字段(过期时间)来判断资源是否过期,未过期则直接使用本地缓存资源(不会对服务器发起请求);协商缓存是浏览器查询到cache-control过期后,再次向服务器发起请求,服务器告诉浏览器是否继续使用本地缓存资源,下面对这两种请求展开解释。
强制缓存:浏览器第一次对服务器发次请求之后,服务器返回资源并返回cache-control,下一次浏览器会在请求之前优先查询cache-control,未过期则会直接使用本地缓存
协商缓存:协商缓存的实现方式有两种,分别通过last-modified字段(最后修改时间)和e-tag字段(唯一标识)来实现
last-modified:服务器首次返回响应时会带上last-modified字段,当浏览器查询到本地资源过期时,会再次发起请求并带上last-modified里的时间,服务器会将这个时间和最新的last-modified进行对比,来判断资源是否已经更新,如未更新则返回304通知浏览器继续使用本地缓存
e-tag:服务器用e-tag字段来唯一标识响应资源,当本地缓存过期时,浏览器会带上e-tag再次发起请求,服务器会对e-tag进行对比,无变化则返回304
e-tag字段优先级比last-modified高,若同时存在两个字段,服务器会先判断e-tag是否变化,若变化则不再查看last-modified,若无变化才会继续查看last-modified