http 缓存就是基于 http 协议的浏览器文件级缓存机制,通俗来讲就是当我们使用浏览器首次访问一个页面时,会将一些资源文件(img,css,js等)缓存到本地,以便之后打开此页面时直接读取本地的资源文件,进而缩短页面的响应时间,减少对服务器的请求次数。http缓存分为强缓存和协商缓存。
强缓存:根据Expires和Cache-Control字段判断缓存是否失效,如果没有失效,则直接访问本地缓存的资源文件,不需要向服务器请求。Expires和Cache-Control的具体使用以及不同点:
Expires:
在响应头部(Response Headers)添加,格式
expires: Mon, 19 Feb 2024 17:43:04 GMT
代表失效日期是2024年2月19日的17:43:04,周一
Cache-Control:
Cache-Control:max-age=600
max-age=6000代表6000秒,也就是缓存在6000秒之后就失效了,Cache-Control还有很多其他的指令,这里我就不一一介绍了。
Expires 是http1.0的产物,Cache-Control是http1.1的产物,两者如果同时存在的话,Cache-Control的优先级要高于Expires。
协商缓存:浏览器首次向服务器发送请求,服务器响应请求并返回资源,同时在响应头部(Response Headers)中放入ETag和Last-Modified两个新字段。而在浏览器再次向服务器请求时会在响应头部(Request Headers)携带If-None-Match和If-Modified-Since,If-None-Match值就是之前服务器返回的ETag值,If-Modified-Since的值对应的是Last-Modified的值。如果它们两两校验成功,则服务器会返回状态码304,也就是代表缓存有效,可以直接使用。如果校验失败,则正常返回数据,状态码200,并附上新的ETag和Last-Modified。
注:强缓存的优先级高于协商缓存