缓存不得存储任何请求的响应,除非:

    • 请求方法是缓存理解的且被定义为可缓存的,并且
    • 响应状态码是缓存理解的,并且
    • “no-store”缓存指定(查看5.2节)没有出现在请求或响应头字段中,并且
    • 如果缓存是共享的,“private”响应指令(查看5.2.2.6节)没有出现在响应中,并且
    • 如果缓存是共享的,Authorization头字段没有出现在请求中,除非响应明确允许(查看3.2节),并且
    • 响应:
      • 包含Expires头字段(查看5.3节),或
      • 包含max-age响应指定(查看5.2.2.8节),或
      • 包含s-maxage响应指令(查看5.2.2.9节)同时缓存是共享的,或
      • 包含允许它被缓存的缓存控制扩展(查看5.2.3节),或
      • 有一个默认被定义为可缓存的状态码(查看4.2.2节),或
      • 包含一个public响应指定(查看5.2.2.5节)。

    注意,上面列出的任何要求都可以被cache-control扩展覆盖;查看5.2.3节。

    在这个上下文中,如果缓存认识并实现了请求方法或响应状态码的所有特定缓存相关的行为,那么缓存就“认识(理解/明白)”它了。

    注意,在一般的操作中,一些缓存不会存储一个既没有缓存校验器也没有明确过期时间的响应,因为通常这样的响应存储下来是没有用的。然而,缓存没有禁止存储这样的响应。