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

ant*_*yer 6 ruby-on-rails http-headers http-status-code-304

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

如果它必须将先前的响应与当前检索到的响应进行比较,它是哪种比较?

Jel*_*Cat 5

魔法发生在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。


Dip*_*pta -1

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

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

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