我阅读了RFC 7232,其中描述了Last-Modified时间如下:
最后修改时间在请求中用作验证器时,隐式是弱的,除非可以使用以下规则推断出它是强的:
客户端将在 If-Modified-Since、If-Unmodified-Since 或 If-Range 标头字段中使用验证器,因为客户端具有关联表示的缓存条目,并且
该缓存条目包含一个日期值,它给出了源服务器发送原始响应的时间,并且
显示的上次修改时间至少早于日期值 60 秒。
我的问题是,“为什么 Last-Modified 支持的这三个条件意味着它可以成为强验证器?”
您引用的部分继续说:
此方法依赖于以下事实:如果有两个不同的响应 由源服务器在同一秒内发送,但两者都有 同样
时间,那么这些响应中至少有一个会Last-Modified
值等于其Date
时间。 任意的 60 秒限制可防止Last-Modified
和Date
值是从不同的时钟或在 准备回复的时间有些不同。Last-Modified
假设我们有两种资源表示形式,A是旧版本,B是新版本。如果它们都在同一秒内进行修改,那么它们都可以在相同的
Last-Modified
时间内提供服务。因此,如果我们要做的只是 Last-Modified
标头,我们不知道表示是 A 还是 B。这就是 Last-Modified
成为弱验证器的原因。
但是假设缓存条目还有一个关联的
Date
字段,并且它晚于 Last-Modified
。我们现在可以安全地假设缓存条目是 B,即截至 Date
时间的当前版本。由于我们现在知道缓存条目代表哪个版本,我们可以将 Last-Modified
视为强验证器。
(请注意最新标准使用1秒而不是60秒。)