内容提要
浏览器缓存机制通过强缓存和协商缓存提升用户体验。强缓存使用Expires和Cache-Control头,前者依赖绝对时间,后者使用相对时间,优先级更高。协商缓存通过Last-Modified和ETag验证资源更新。合理的缓存策略能减少请求,提高加载速度。
关键要点
-
浏览器缓存机制通过强缓存和协商缓存提升用户体验。
-
强缓存使用Expires和Cache-Control头,前者依赖绝对时间,后者使用相对时间,优先级更高。
-
协商缓存通过Last-Modified和ETag验证资源更新。
-
合理的缓存策略能减少请求,提高加载速度。
-
强缓存分为Expires和Cache-Control两类,Expires使用绝对时间,Cache-Control使用相对时间。
-
Cache-Control指令包括max-age、s-maxage、private、public、no-store和no-cache。
-
协商缓存通过Last-Modified和ETag进行资源验证,确保缓存的有效性。
-
ETag解决了Last-Modified的时间戳不准确和高频修改的问题。
-
HTTP状态码200表示请求成功,304表示缓存有效。
-
缓存优先级规则为Cache-Control优先于Expires,强缓存优先于协商缓存,ETag优先于Last-Modified。
-
启发式缓存在没有Expires或Cache-Control头时应用,基于Last-Modified时间进行缓存。
-
在分布式系统中,确保Last-Modified时间戳一致性以避免缓存验证不一致。
延伸问答
什么是强缓存和协商缓存?
强缓存是指浏览器通过Expires和Cache-Control头来决定是否使用缓存,而协商缓存则通过Last-Modified和ETag来验证资源是否更新。
Cache-Control和Expires有什么区别?
Cache-Control使用相对时间定义缓存有效期,优先级高于Expires,后者依赖绝对时间,可能因客户端和服务器时间不一致而导致缓存不准确。
如何判断缓存是否有效?
浏览器首先检查强缓存是否有效,如果过期则使用协商缓存,服务器返回304 Not Modified表示缓存有效。
ETag的作用是什么?
ETag用于提供资源的唯一标识,解决了Last-Modified时间戳不准确和高频修改的问题,确保更精确的缓存验证。
在分布式系统中,如何处理缓存一致性?
在分布式系统中,需确保Last-Modified时间戳一致性,避免因负载均衡导致的缓存验证不一致,建议禁用ETag以减少缓存失效。
什么是启发式缓存?
启发式缓存是在没有Expires或Cache-Control头时应用的策略,基于Last-Modified时间进行缓存,计算公式为(currentTime - lastModified) * 0.1。