浏览器打开页面的时候,会加载页面所需的HTML、CSS、JS、图片等资源文件,如果每次打开都要全部重新加载,既耗时又浪费带宽,所以浏览器本身对资源文件是有缓存机制的。
概述
浏览器缓存主要分为强缓存和协商缓存。当打开网站的时候,请求资源,浏览器首先会查看本地是否有这个资源,以及这个资源的response header
中附带的缓存策略是什么,
强缓存
简单粗暴,如果资源没有过期,就直接取这个资源,如果过期了就走协商缓存。
判断资源是否过期,主要是根据几个字段来。
Response Header中的Cache-Control
有以下几个值:
max-age=xxx
,意思是在多少秒内都是用缓存,超过了就继续请求服务器。private
仅浏览器可以缓存public
浏览器和代理服务器都可以缓存no-cache
不进行强缓存no-store
不强缓存,也不协商缓存
规则可以同时多条并列,逗号隔开。
协商缓存
当Cache-Control
为no-cache
的时候,会进行协商缓存的校验。
Last-Modify
搭配If-Modify-Since
。Last-Modify
是该资源第一次请求时,服务端会返回header中的字段,代表该资源的最后修改时间;If-Modify-Sice
是第二次请求时,根据HTTP规定,浏览器会向服务端发送请求报文If-Modify-Since
,询问该时间过后,资源是否被修改过。如果时间一致,则说明资源没有被修改过,返回报文304
,浏览器端接到这个状态码,直接把本地缓存文件返回到客户端中,节省流量。