Web资源缓存简介

你目前知道的web资源缓存有哪些方式呢?

CDN缓存

若请求的资源未过期,则返回304,否则缓存服务器[CDN]根据浏览器提供的域名,通过Cache内部专用DNS解析此域名的IP,再由缓存服务器向此IP地址提交访问请求。缓存服务器从实际IP地址获取资源响应后,一方面在本地进行保存,以备以后使用,另一方面将资源响应返回给客户端

代理缓存

不缓存

HTML页面附加meta标签

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"> 
<meta http-equiv="expires" content="-1">

强缓存

响应内容返回时,附加表示资源过期时间的响应头属性expires或表示缓存控制的响应头属性cache-control。浏览器根据这些属性判断是否使用缓存。Expires属性返回一个绝对时间,当浏览器与服务器有时差时则有误差【服务器设置的缓存过期时间与当前客户端时间】,属于http1.0时的解决方案。Cache-control属性返回max-age=缓存最大时间,是一个相对时间,进行比较的是浏览器时间【上次客户端缓存时间+max-age与当前客户端时间】,不存在时差,属于http1.1时的解决方案

协商缓存

当Cache-Control强缓存失效,发送请求时,附加表示是否更新的请求头属性If-Modified-Since,服务端获取与Last-Modified作对比,若最后修改时间较新,则返回200,否则返回304使用缓存。但是last-modified精确到秒级,若1秒内变化多次,则不能及时更新,或有些资源定期生成,内容没变化,last-modified变化了,导致资源不能使用缓存。而http1.1使用If-None-Match/Etag解决了该问题。同样是当强缓存失效,发送请求时,附加表示是否不匹配的请求头属性If-None-Match,设置客户端etag,服务端获取与表示资源在服务端的唯一标识符Etag进行对比,若一致则使用返回304,否则返回200

离线缓存

本地缓存