ajax304未修改收不到响应

ajax 304 not modified can't receive response

我有一个 API 来处理缓存控制。服务器将设置响应 header "last-modified" 并且来自浏览器的下一个请求将具有 If-modified-Since header.

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

Is ajax need to manually to fulfill browser behavior about cache control?

有没有更好的解决方案?

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

对于 304 响应,响应 body 应该为空,这就是它的工作方式。 The protocol 状态:

The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.

因此,如果您发送带有 If-modified-since 的请求并且不满足条件,您将不会收到响应 body(实际数据)。您基本上是在声明您拥有内容,并且只有在更新后才需要它。

尽量不要使用 If-Modified-Since header 而是使用 Cache-control header:

$.ajax({
...
headers: {
     'Cache-Control': 'max-age=1000' 
}
...
});

经过研究this终于解决了。

将请求 Header 设置为

'Cache-Control': 'max-age=0'

如果响应提供 Last-Modified header,下一个请求将自动设置 If-Modified-Since 且值相等。

304响应时,响应内容来自浏览器缓存。