浏览器的缓存是什么?
应付简单面试的话:
强缓存(本地缓存):浏览器本地在有效时间内强制缓存。
弱缓存(协商缓存):和服务器沟通,由服务器告知浏览器是否使用缓存。
深度理解http和浏览器的缓存协议:
HTTP标准里并没有所谓的强弱缓存这些概念,只是开发者为了方便理解而构建出来的名词而已,在HTTP里所谓的缓存本质上只是浏览器和业务侧根据不同的报文字段做出的不同的缓存动作而已。四种缓存协议如下:
1、Cache-Control
2、Expires
3、ETag/ If-Node-Match
4、Last-Modified/If-Modified-Since
Cache-Control :通过响应头设置 Cache-Control :max-age,指定该请求需要在浏览器缓存多久,在有效时间内重复请求,则无需再次访问服务器,直接从浏览器获取结果。
Expires:Expires则是通过响应头设置Expires字段:Expires:xxx,指定缓存过期时间,在过期时间内重复请求,则无需再次访问服务器,直接从浏览器获取结果。
ETag/ If-Node-Match:ETag则需要搭配If-Node-Match使用,在首次请求资源时,服务端会把结果签名缓存在服务端,并设置在响应头ETag字段中,返回给浏览器业务侧则需要缓存ETag和结果数据,并且在下次请求带在请求头If-Modified-Since字段中,服务端再次接受请求后,判断ETag和If-Node-Match是否相等,如果相等,意味着数据结果没有发生变化,直接返回304,业务侧收到304,直接返回之前的缓存结果数据。
Last-Modified/If-Modified-Since:Last-Modified要搭配If-Modified-Since使用,在首次请求资源时,服务端在响应头中设置Last-Modified字段,返回给浏览器,用户测则需要缓存Last-Modified和结果数据,在下次请求带上请求头If-Modified-Since,服务端再次接受请求,判断If-Modified-Since是否大于等于Last-Modified,如果是意味着结果数据没有变化,返回304,业务侧收到304,直接返回之前的缓存结果数据。