【问题标题】:ajax 304 not modified can't receive responseajax 304 未修改无法接收响应
【发布时间】:2016-12-04 08:31:52
【问题描述】:

我有一个 API 来处理缓存控制。服务器将设置响应头“last-modified”,来自浏览器的下一个请求将具有 If-modified-Since 头。

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

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

有更好的解决方案吗?

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

【问题讨论】:

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


    【解决方案1】:

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

    304 响应不得包含消息正文,因此始终以标头字段之后的第一个空行终止。

    因此,如果您使用If-modified-since 发送请求并且不满足条件,您将不会获得响应正文(实际数据)。您基本上是在声明您拥有内容并且只有在更新时才想要它。

    尽量不要使用If-Modified-Since 标头,而是使用Cache-control 标头:

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

    【讨论】:

    • 我必须使用 If-Modified-Since 标头来验证是否更改了数据。顺便问一下,Cache-Control 与 request 和 response 的区别在哪里?
    【解决方案2】:

    终于在我研究this后解决了。

    将请求标头设置为

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多