浏览器何时发送If-Modified-Since?
我正在用 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.1 在14.25 If-Modified-Since部分提到:
在处理一个
If-Modified-Since
这个头信息时,有些服务器会用精确的日期比较来判断是否发送304(未修改)响应,而不是用小于的比较方式。为了在发送If-Modified-Since
头信息进行缓存验证时获得最佳效果,建议客户端尽量使用之前收到的Last-Modified
头信息中的精确日期字符串。
这说明,当你希望或需要客户端发送 If-Modified-Since
时,应该发送一个 Last-Modified
头信息。