仅当我手动发送If-None-Match标头时,Rails缓存才有效

时间:2016-05-11 06:06:30

标签: ruby-on-rails ruby-on-rails-4 caching

我的导轨代码:

def index
  battles = Battle.feed(current_user, params[:category_name], params[:future_time])

  @battles = paginate battles, per_page: 50

  if stale?([@battles, current_user.id], template: false)
    render 'index'
  end
end

如果我手动发送If-None-Match标头和最后一个Etag,我会得到304状态代码作为回报,如果我不手动发送(标头是自动发送的,具有相同的If-None-Match标头)我得到200状态代码......

我正在使用Postman rest客户端检查服务器(启用缓存)。

1 个答案:

答案 0 :(得分:0)

我无法评论Rails方面的内容,但如果我关注你,这是正确的行为。

当发送“If-None-Match”时,如果内容未更改(相同的电子标签),则会得到304。这基本上是说你自己或者代理之间的某些内容已经有了内容,因此不需要再次转移主体。

如果你省略了标题,那么你会看到一个200.默认情况下,邮差会发送一组标题,但它也是非常精简的,因为它剥离了很多。在您的浏览器中尝试相同的请求,您将获得304.您将看到您的浏览器将设置为尽可能使用缓存。

如果您依赖服务器端缓存,情况可能会有所不同。您可能会看到看起来像是一个新的响应,但服务器实际上做的很少,但却产生了200响应。

总结标题是从您的描述中做正确的工作。