浏览器何时发送If-Modified-Since?

5 投票
1 回答
2184 浏览
提问于 2025-04-16 23:56

我正在用 Python 的 Flask 框架动态生成一个 recent.rss 文件,结果每次都返回 200 OK。我本来打算通过设置 Expires 这个头信息,让它的过期时间设定在未来一周来解决这个问题,并检查浏览器是否发送了 If-Modified-Since

如果浏览器发送了这个信息(我会比较日期),那么我就可以用 return nothing, 304 来代替 return response,这样就能告诉浏览器这个资源没有被修改过。但根据 Firebug 和 request.environ 的信息,我发现我的浏览器根本没有为这个资源发送 If-Modified-Since

我知道我可以把数据保存到一个文件里,然后用一个真正的静态文件服务器来提供这个文件,但我可能真的需要通过 WSGI 来提供静态文件。即使不需要,我也想知道为什么这个方法不奏效。

谢谢大家的帮助。

1 个回答

13

RFC 2616 HTTP/1.114.25 If-Modified-Since部分提到:

在处理一个 If-Modified-Since 这个头信息时,有些服务器会用精确的日期比较来判断是否发送304(未修改)响应,而不是用小于的比较方式。为了在发送 If-Modified-Since 头信息进行缓存验证时获得最佳效果,建议客户端尽量使用之前收到的 Last-Modified 头信息中的精确日期字符串。

这说明,当你希望或需要客户端发送 If-Modified-Since 时,应该发送一个 Last-Modified 头信息。

撰写回答