Section 4 of RFC 7234这一段:
当存储了多个合适的响应时,缓存必须使用
最近的响应(由日期标题字段确定)。它
也可以使用“cache control:max age=0”转发请求,或者
“缓存控制:无缓存”以消除要使用的响应的歧义。
它提到使用Date
或Cache-Control
头使已存储的响应失效。Last-Modified
标题是什么?我能用它做同样的用途吗?
最佳答案
Last-Modified
用作验证程序。你引用的章节前面提到了这些:
当出现请求时,缓存不能重用存储的响应,除非[…]存储的响应是:
新鲜(见第4.2节),或
允许过期送达(见第4.2.4节),或
成功验证(见第4.3节)。
Section 4.3详细说明验证。我想您一定对4.3.2感兴趣:
[a]包含If-Modified-Since
头字段的请求表示客户端希望在修改日期前验证自己存储的一个或多个响应。如果以下情况之一为真,则缓存收件人应生成304(未修改)响应(使用所选存储响应的元数据):
选定的存储响应有一个Last-Modified
字段值,即
早于或等于条件时间戳;
所选存储响应中不存在Last-Modified
字段,但其Date
字段值早于或等于条件时间戳;或者,
所选存储响应中既不存在Last-Modified
也不存在Date
,但缓存将其记录为在早于或等于条件时间戳的时间接收到。
是的,这完全符合RFC的要求。由于Last-Modified
/If-Modified-Since
是早在http/1.0就引入的一种相当旧的机制,因此您可以期望缓存符合要求。