请求资源流程
浏览器行为的影响
- 在浏览器输入地址,然后回车:
会进行上述完整流程- f5刷新
则忽略资源有效时间,直接带相关条件(If-None-Match ( If-Modified-Since))去请求服务器- ctrl+f5
忽略资源有效时间,忽略条件,直接请求服务器资源
cache-control
缓存驱逐
驱逐算法用于将陈旧的缓存副本替换为新鲜的,注意,一个陈旧的缓存是不会直接被清除或忽略的,当客户端发起一个请求时,缓存检索到已有一个对应的陈旧缓存,则缓存会先将此请求附加一个If-None-Match头,然后发给目标服务器,以此来检查该缓存是否是依然还是算新鲜的,若服务器返回了 304 (Not Modified)(该响应不会有带有实体信息),则表示此资源副本是新鲜的,这样一来,可以节省一些带宽。若服务器通过 If-None-Match 或 If-Modified-Since判断后发现已过期,那么会带有该资源的实体内容返回。
vary
vary会指定一个字段,只有请求头中的这个字段与缓存资源中的这个字段相同时,才会返回缓存资源,否则请求服务器。
用vary头有利于内容服务的动态多样性。例如,使用Vary: User-Agent头,缓存服务器需要通过UA判断是否使用缓存的页面。如果需要区分移动端和桌面端的展示内容,利用这种方式就能避免在不同的终端展示错误的布局。
加速资源
一些长期不更新的文件,缓存时间会很长,更新它们也很有难度。在这些资源名称后面加入版本号,可以解决此问题
max-age expires
max-age 表示缓存资源的有效时间
expires 表示缓存自愿的到期时间
如果两个值同时存在,那么max-age优先级更高
etag
一般是一个文件的散列值,即文件的md5签名,用于对比显示文件是否有变化
Last-Modified
一个文件上次修改的时间