我有一个API来处理缓存控制。服务器将设置响应标头"最后修改"来自浏览器的下一个请求将具有If-modified-Since标头。
但是,当我使用ajax请求API时,它不会自动设置If-modified-Since标头。 我在ajax请求标头中设置了If-modified-Since,服务器响应304状态代码。但是反应机构是空的。
ajax是否需要手动完成有关缓存控制的浏览器行为?
有更好的解决方案吗?
我发现了一个类似的问题here。
答案 0 :(得分:0)
对于304响应,响应正文应该为空,这就是它的工作方式。 The protocol州:
304响应绝不能包含消息体,因此总是在头字段后面的第一个空行终止。
因此,如果您使用If-modified-since
发送请求且条件不满足,则不会获得响应正文(实际数据)。你基本上声明你拥有内容,只有在更新后你才想要它。
尝试不使用If-Modified-Since
标头,而是使用Cache-control
标头:
$.ajax({
...
headers: {
'Cache-Control': 'max-age=1000'
}
...
});
答案 1 :(得分:0)
最后,我在研究this之后解决了这个问题。
将请求标头设置为
'Cache-Control': 'max-age=0'
如果响应提供Last-Modified标头,则下一个请求将自动设置If-Modified-Since且值相等。
当发生304响应时,响应内容来自浏览器缓存。