新鲜响应是一个其年龄还没有超过它的新鲜度生命周期的响应。反过来,过期响应是生命超过的。
响应的新鲜度生命周期是从它被源站生成到它过期的时间长度。一个明确的过期时间是源服务器有意让一个被存储的响应在不经进一步验证的情况下不能被继续使用的时间,当没有明确的过期时间的时候,启发式过期时间由缓存分配。
响应的年龄是从它被源站生成或成功的从源站校验以来经过的时间。
当一个响应在缓存中是“新鲜的”,它可以被用于满足后续请求而不必联系源服务器,进而提高效率。
用以确定新鲜度的主要机制是源服务器提供一个明确的未来的过期时间,使用Expires头字段(5.3节)或max-age响应指令(5.2.2.8)。通常,源服务器在相信表示在过期时间到达之前不会出现语义重要的方式的变更时,将分配未来的明确过期时间给响应。
如果源服务器希望缓存验证每个请求,它可以分配一个明确的过去的过期时间已表明那个响应已经过期。合规的缓存通常在将一个过期缓存用于后续请求的时候,会对它进行验证。
因为源服务器不总是提供明确的过期时间,缓存也被允许使用启发式来确定具体情况下的过期时间(4.2.2节)。
计算一个缓存是否过期的方法是:
响应是新鲜的 = (新鲜度生命周期 > 当前年龄)
新鲜度生命周期定义在4.2.1节,当前年龄定义在4.2.3节。
客户端可以在一个响应中发送max-age或main-fresh缓存指令,以指示对应响应的新鲜度计算方式(5.2.1节)。
当计算新鲜度时,为了避免在解析时间时的普遍问题:
- 虽然所有的日期格式都被规定为区分大小写的,但是一个缓存接收者应该以不区分大小写的方式匹配日期,周,和时区。
- 如果一个缓存接收者的内部时间实现解析度比HTTP-date的小,接收者必须在内部将解析的Expires日期表示为等于或早于接收值的最近时间。
- 缓存接收者不得允许本地时间影响年龄或过期时间的比较和计算。
- 缓存接收者应该在计算过期时间的时候将带有出GMT或UTC以外的其他时区缩写视为无效的日期。
注意新鲜度只应用于缓存操作,它不能被用于强制用户代理更新其显示或重载资源。查看第6节了解缓存和历史机制之间的区别的解释。