浏览器Cache 梳理
http://www.bujiaban.net/wordpress/?p=333
浏览器(静态文件)cache
资源验证
Last-Modified/ If-Modified-Since/ 304 Not-Modified 基于最后修改时间 内容不变,最后更新时间改变了 负载均衡下,同一份内容可能每个服务器上的最后修改时间会存在不一样 SSI情况下,服务器需要做相应配置(如Apache需要开启XBitHack) Etag/ If-None-Match 基于文件内容
保鲜期
Expires 服务器时间 绝对时间 保鲜期=Expires头域的值-响应的Date域的值 Cache-Control 相对时间 浏览器本地时间 保鲜期=Cache-Control头域里max-age的值 Cache-Control优先于Expires 请求中通过Cache-Control:max-age=0 强制任何中间的缓存去源服务器验证缓存副本 请求中通过Cache-Control:no-cache 强制任何中间的缓存去源服务器获得最新的副本 响应中通过Cache-Control:no-cache 强制所有缓存必须到源服务器验证才能响应后续的请求 永不过期?其实HTTP1.1的服务器不会发送超过一年的过期时间
请求方式的不同
F5 刷新,向服务器请求所有页面资源,保鲜期(Cache-Control和Expires)不能使用,但资源验证方式(Last-Modified和Etag)可以使用,即是不允许直接使用本地缓存,但可以使用缓存协商, Ctrl+F5 强制刷新,向服务器请求所有页面资源,不使用缓存协商,不允许使用本地缓存,取回的资源都是最新的 链接/跳转 保鲜期内允许直接使用本地缓存,允许使用缓存协商
缓存协商组合策略