一个Web浏览器何时会发送If-Modified-Since请求头?

5

我正在使用Python Flask动态创建recent.rss文件,并以这种方式发送它,自然地,它总是通过200 OK发送。 我打算通过将标头Expires设置为未来一周并检查浏览器是否发送了If-Modified-Since来解决这个问题。

如果是这样(在比较日期后),我将只需执行return nothing, 304而不是return response,但根据Firebug和request.environ的信息,我的浏览器似乎永远不会为该资源发送If-Modified-Since

我知道我可以将数据保存到文件中,并使用Web服务器将其作为真实静态文件提供,但我可能真的需要通过WSGI提供静态文件,即使不需要,也想知道为什么这样做不起作用。

感谢您的帮助。


2
请查看规格:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25 - ceving
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 响应头。


我还发现,在Firefox 54版本中,只有在设置了“Last-Modified”和“Expires”两个属性时,才会发送头信息。 - Alex S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接