未修改的ajax 304无法接收响应

时间:2016-07-29 15:00:40

标签: jquery ajax http-status-code-304

我有一个API来处理缓存控制。服务器将设置响应标头"最后修改"来自浏览器的下一个请求将具有If-modified-Since标头。

但是,当我使用ajax请求API时,它不会自动设置If-modified-Since标头。 我在ajax请求标头中设置了If-modified-Since,服务器响应304状态代码。但是反应机构是空的。

  

ajax是否需要手动完成有关缓存控制的浏览器行为?

有更好的解决方案吗?

我发现了一个类似的问题here

2 个答案:

答案 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响应时,响应内容来自浏览器缓存。