Cache-Control
计算一个response的Freshness Lifetime(新鲜生命周期、保质期)值的规则为:
- 如果cache是共享的、且response中含有s-maxage,则值为s-maxage;
- 如果response中含有max-age,则值为max-age;
- 如果response的header中含有Expires,则值为Expires减去response header中的Date;
- 否则的话,表示response中没有显式的过期时间,可能会采用探测型的策略(Last-Modified);
Request Cache-Control Directives:
- max-age: <delta-seconds>
表示client不愿意接收age超过delta-seconds秒的response。 - max-stale: <delta-seconds>
如果max-stale被赋值,表示client愿意接收超过其freshness lifetime delta-seconds秒的response;如果max-stale未被赋值,则表示client愿意接收任何age的stale response。 - min-fresh
- no-cache
表示在没有成功验证server时, - no-store
- no-transform
- only-if-cached
表示client仅仅愿意接受一个stored response。server如果有缓存则返回缓存,否则返回504错误。
表示client愿意接受超过其freshness lifetime一定时间的response。如果max-stale没有被赋值,则表示client愿意接受任何陈旧(stale)的值。
Response Cache-Control Directives
- must-revalidate
- no-cache
在使用任何cached response之前,必须先重新验证服务器(revalidate with the server)。首先连接服务器、并比较服务器上资源的ETag和缓存中的ETag是否一样,如果一样,则返回缓存的资源;
否则,就意味着资源已经发生更新,client需要下载最新的资源并返回。 - no-store
- no-transform
- public
- private
- proxy-revalidate
- max-age=<delta-seconds>
该response在delta-seconds秒以后将变为陈旧的。 - s-maxage=<delta-seconds>
在共享的缓存中,s-maxage会覆盖max-age指令值或者Expires header的值。