Rails如何知道何时以304状态响应?

时间:2017-03-24 13:26:20

标签: ruby-on-rails http-headers http-status-code-304

鉴于我有rails控制器访问DB以检索数据并使用序列化器呈现JSON响应,必须满足哪些条件才能使rails响应304?

如果必须将先前的回复与当前检索的回答进行比较,那么它的比较是什么?

2 个答案:

答案 0 :(得分:0)

服务器在同一请求者的先前和当前请求中查找Cache-Control,Content-Location,Date,ETag,Expires和Vary http标头值。

如果一切都相同,则返回304响应,否则更改内容并返回200。

您可以查看https://httpstatuses.com/304以获取更多信息。

答案 1 :(得分:0)

魔术发生在Rack::ETagRack::ConditionalGet中。 (我的位于$GEM_HOME/rack-1.5.5/lib/rack/conditionalget.rb$GEM_HOME/rack-1.5.5/lib/rack/etag.rb。)

这些是中间件。

Rack::ETag提取主体(机架函数@app.call返回的主体)的摘要,并将响应ETag标头设置为此值。至少对于Rails 4.0而言,它是MD5十六进制摘要。

Rack::ConditionalGet将请求的If-None-Match标头与响应的ETag标头进行比较。如果它们匹配,则返回304。