在前端开发中,合理的使用缓存可以节增强网站性能和用户体验。
1:强制缓存(http1.1)
server端在响应头(response headers)中规定了对资源文件缓存时间,方式。在浏览器第一次访问服务器取到数据之后,在过期时间之内不会再去重复请求。
如图,强制缓存通过 response Headers 中的Cache-Control 响应头来实现返回200。Cache-Control 的属性
1:private:私人的,代表客户端可以缓存,代理服务器不可以缓存。public代表客户端和代理服务器都可以缓存
2:max-age代表可缓存的秒数
3:no-store代表客户端不可以缓存,每次都刷新页面都要请求数据。
4: no-cache:需要询问服务器是否可以用此缓存资源;
二、协商缓存(http1.1)
概念:协商商缓存每次读取数据时都需要跟服务器通信,在第一次请求服务器时,服务器会返回资源,并且某个资源的缓存标识/。当第二次请求资源时,将缓存标识发送给服务器,服务器拿到标识后判断标识是否匹配,如果没匹配就代表资源已经更新,服务器会将新数据和新的缓存标识返回到浏览器;如果缓存标识匹配,表示资源没有更新,并且返回 304 状态码。
三、浏览器缓存过程
1:浏览器第一次加载资源时候,返回200,并下载资源,并缓存资,.第二次以后加载资源时,先比较当前和上一次返回200时的时间差,如果没有超过max-age对定的时间,使用强缓存,从本地缓存读取该文件;如果时间过期,则向服务器重新求情资源。
2:服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,Etag值一致则没有修改,使用协商缓存 ,返回304;如果不一致,返回新的数据带上新的Etag值并返回200状态吗。
四、总结
1:强制缓存和协商缓存都可做到本地缓存的功能;
2:强制缓存返回200,协商缓存返回304;
3:强制缓存直接根据缓存时间是否从缓存中取,协商缓存要询问服务器是否能使用缓存。
4:同时使用两种方式兼容处理。