前言
最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache-control、为什么明明设置了 no-cache 却还是发请求,为什么多次访问时有时请求里带了 etag,有时又没有带?等等。。。后来查了一些资料以及同事亲自验证,总算对这些问题有了个清晰的理解,现在整理出来以备忘。
大纲:
1、缓存的分类
2、浏览器缓存机制详解
2.1 HTML Meta标签控制缓存
2.2 HTTP头信息控制缓存
2.2.1 浏览器请求流程
2.2.2 几个重要概念解释
3、用户行为与缓存
4、Refer
缓存的分类
缓存分为服务端侧(server side,比如 Nginx、Apache)和客户端侧(client side,比如 web browser)。
服务端缓存又分为 代理服务器缓存 和 反向代理服务器缓存(也叫网关缓存,比如 Nginx反向代理、Squid等),其实广泛使用的 CDN 也是一种服务端缓存,目的都是让用户的请求走”捷径“,并且都是缓存图片、文件等静态资源。
客户端侧缓存一般指的是浏览器缓存,目的就是加速各种静态资源的访问,想想现在的大型网站,随便一个页面都是一两百个请求,每天 pv 都是亿级别,如果没有缓存,用户体验会急剧下降、同时服务器压力和网络带宽都面临严重的考验。
浏览器缓存机制详解
浏览器缓存控制机制有两种:HTML Meta标签 vs. HTTP头信息。
2.1 HTML Meta标签控制缓存
浏览器缓存机制ÿ