2016-05-23 23 views
1

Section 4 of RFC 7234已经存储的应答具有本段:的Invalidate与Last-Modified头

当存储一个以上的合适的响应,高速缓冲存储器必须使用 最近响应(如由Date头字段来确定)。它也可以用“Cache-Control:max-age = 0”或 “Cache-Control:no-cache”转发请求以区分使用哪个响应。

它提到关于已经存储的响应与DateCache-Control头失效。

什么是Last-Modified标题?我可以将它用于相同的目的吗?

+0

你问哪个问题:“*符合RFC 7234?*”或“*现有缓存是否实现了这个?*”? –

+0

@VasiliyFaronov第二个,实际上。我只想知道我是否可以使用这个头来使这些响应无效。 – Lewis

+0

获取HTTP缓存(特别是用户代理缓存)并不是一件容易的事,可以存储几个适合于相同请求的新鲜响应。这也不是“无效”。你确定你没有把事情与其他事情混淆吗?更详细地解释你的情况可能是一个好主意。 –

回答

1

Last-Modified作为验证者。这些在前面你引述的部分中提到:

当一个请求提出,缓存不得重复使用存储的响应,除非[...]所存储的响应可以是:

  • 新鲜(见4.2节),或
  • 允许服务于旧的(参见4.2.4节),或
  • 成功验证(见4.3节)。

Section 4.3解释了验证的细节。我认为4.3.2是必须的您感兴趣的:

[A]包含If-Modified-Since头字段请求中指出,客户希望通过修改日期来验证一个或多个它自己的存储响应。缓存接收者应当产生一个304(未修改)响应(使用所选择的存储的响应的元数据),如果满足下列情况之一是真实的:

  1. 所选存储响应具有Last-Modified场值,该值是早于或等于条件时间戳的 ;
  2. Last-Modified字段存在于选定的存储响应中,但它的Date字段值早于或等于条件时间戳;或者,
  3. 既不Last-Modified也不存在于选定的存储的响应,但缓存记录它已被接收的时间早于或等于条件时间戳。

所以是的,它完全符合RFC的要求。由于Last-Modified/If-Modified-Since是早在HTTP/1.0中引入的一种相当古老的机制,因此您可以期望缓存符合要求。

+0

这个问题似乎是关于选择几个新鲜的回复之一,这不涉及重新验证。但是,这个问题很可能会被问到。 –

+0

@VasiliyFaronov嗯,你其实是对的。 'Last-Modified'不会影响新鲜度,只会使用具有If-Modified-Since'但没有'If-None-Match'标头的请求。 – DaSourcerer

+0

感谢您的回答。顺便说一句,我其实不明白第二段。根据我的理解,请求必须包含'If-Modified-Since'头,以便通过'Last-Modified'头进行验证。当一个新文件可用时,这个动作是否真的迫使浏览器覆盖旧文件?仅仅因为请求并不总是包含'If-Modified-Since'头字段。 – Lewis