1:浏览器的缓存分为哪几种?请简要说明。
分为两种:强缓存和协商缓存
强缓存
强缓存利用http的头部的expires和cache-control来控制
expires:是一个绝对时间,表示缓存的过期时间,在这个时间点之前,表示命中缓存,缺点:这是服务器上的时间,有可能与客户端的时间有差异
cache-control:max-age 是一个相对时间,单位是秒,比expires要可靠些
协商缓存
当浏览器第一次向服务器请求资源的时候,会把资源返回给浏览器,并将资源的一些信息如(文件摘要,最后修改时间)等返回给浏览器,并告诉浏览器将这些信息缓存起来,当浏览器再次向服务器请求时,会将这些信息一起发送给服务器,服务器根据浏览器的缓存资源判断是否需要进行更新,如果不需要更新,就返回304,和not-modified,否则就返回新的资源
协商缓存利用[last-modified,if-modified-since] 和[etag,if-not-match]来管理
1:浏览器第一次请求服务器资源的时候,服务器返回该资源,并将last-modified返回给浏览器
2:当浏览器再次向服务器请求该资源的时候,会带上if-modified-since,它的值就是三次服务器返回的last-modified
3:服务器根据if-modified-since的值和资源最后一次修改的时间对比,如何两者相等,返回304,则命中协商缓存,否则重新返回新的资源
有时候last-modified不是很精确,比如修改了某些注释,这时候就得用上etag 和if-not-match
1:浏览器第一次请求服务器资源的时候,服务器返回该资源,并将etag返回给浏览器,etag表示资源内容的唯一标识,只用资源的内容修改,etag就会发生改变
2:当浏览器再次向服务器再次请求该资源的时候,会带上if-not-match,它的值就是上次服务器返回的etag,这时候服务器会根据if-not-match和资源的etag做比较,如果两者相等,说明资源内容没有发生改变,返回304,否则返回新资源