首先浏览器缓存分为内存缓存和文件缓存。
内存缓存是浏览器自己控制的,不受Cache-Control影响,跟计算机内存空间大小有关,并且关闭浏览器就会消失。
文件缓存就是我们常说的浏览器缓存。
文件缓存分为2种:强制缓存和协商缓存。
强制缓存就是通过Header上配置Cache-Control:public,max-age=300这种形式实现的,Cache-Control可以客户端在请求Header配置,也可以服务端在响应Header配置。
强制缓存比较适合用在变化频率比较低的文件上,比如图片,js,css都可以,通常我们都使用这种缓存再配合文件hash后缀实现缓存文件的即时更新。
协商缓存是一种服务端控制文件缓存的策略,机制是服务端会根据最新更改时间和文件标识判断响应的时候是否要返回内容。虽然每次都会向服务端发起请求,但是如果服务端确定缓存,会返回很少响应内容。
这种方式比较适合需要频繁更新的文件,需要配合Cache-Control:no-cache阻止强制缓存。另外html不要配置强制缓存,通常我们请求的html文件地址不会加hash。
协商缓存主要通过2组Header标签让客户端与服务端确认来达成:首先服务端在响应的时候会加上Last-Modified和Etag,前者表示文件最后更新时间,后者表示文件唯一标识;然后客户端再次请求的时候会带上If-Modified-Since和If-None-Match,值分别跟服务端的Last-Modified和Etag一致。
参考:
浏览器缓存
网友评论