一文搞懂浏览器缓存机制( 四 )

一文搞懂浏览器缓存机制

文章插图
 
缓存行为主要由缓存策略决定 , 而缓存策略由内容拥有者设置 。这些策略主要通过特定的HTTP头部来清晰地表达 。
以上过程也可以被概括为三个阶段:
  1. 本地缓存阶段:先在本地查找该资源 , 如果有发现该资源 , 而且该资源还没有过期 , 就使用这一个资源 , 完全不会发送http请求到服务器;
  2. 协商缓存阶段:如果在本地缓存找到对应的资源 , 但是不知道该资源是否过期或者已经过期 , 则发一个http请求到服务器 , 然后服务器判断这个请求 , 如果请求的资源在服务器上没有改动过 , 则返回304 , 让浏览器使用本地找到的那个资源;
  3. 缓存失败阶段:当服务器发现请求的资源已经修改过 , 或者这是一个新的请求(在本来没有找到资源) , 服务器则返回该资源的数据 , 并且返回200 ,  当然这个是指找到资源的情况下 , 如果服务器上没有这个资源 , 则返回404 。
4. 用户操作行为与缓存的关系
用户在使用浏览器的时候 , 会有各种操作 , 比如输入地址后回车 , 按F5刷新等 , 这些行为会对缓存有什么影响呢?
一文搞懂浏览器缓存机制

文章插图
 
通过上表我们可以看到 , 当用户在按 F5进行刷新的时候 , 会忽略Expires/Cache-Control的设置 , 会再次发送请求去服务器请求 , 而Last-Modified/Etag还是有效的 , 服务器会根据情况判断返回304还是200;
而当用户使用 Ctrl+F5进行强制刷新的时候 , 只是所有的缓存机制都将失效 , 重新从服务器拉去资源 。
  • 普通刷新 – 当按下F5或者点击刷新按钮来刷新页面的时候 , 浏览器将绕过本地缓存来发送请求到服务器, 此时, 协商缓存是有效的
  • 强制刷新 – 当按下ctrl+F5来刷新页面的时候, 浏览器将绕过各种缓存(本地缓存和协商缓存), 直接让服务器返回最新的资源
  • 回车或转向 – 当在地址栏上输入回车或者按下跳转按钮的时候, 所有缓存都生效
5. 如何从缓存角度改善站点
  • 同一个资源保证URL的稳定性
  • 给css、js、图片等资源增加HTTP缓存头 , 并强制入口html不被缓存
  • 减少对Cookie的依赖
  • 多用Get方式请求动态Cgi
  • 动态CGI也是可以被缓存




推荐阅读