启用Rack :: Deflater时,ETag会发生变化

时间:2012-04-27 17:06:16

标签: ruby-on-rails ruby http http-headers rack

当启用Rack :: Deflater gzip我的响应体时,

偶然发现了一些奇怪的事情。也许我错过了一些东西,但启用此功能后,响应被压缩,但资源的ETag会在每个请求上发生变化。这迫使应用程序每次响应而不是发送304.这可以在没有启用Rack :: Deflater的情况下工作,并且我已经验证页面源不会更改。我正在运行一个瘦的rails应用程序作为Web服务器。

Gemfile.lock的 https://gist.github.com/2510816

有没有我可以从机架中间件获得更多输出,所以我可能会看到最新情况?

提前致谢。

1 个答案:

答案 0 :(得分:9)

所以我已经解决了原来的问题,但仍然没有得到理想的结果。事实证明,Rack :: Deflater需要在中间件堆栈中的Rack :: ETag之前。仍然不确定为什么这会导致ETag更改每个请求,但是如果我将config.middleware.use "Rack::Deflater"更改为 config.middleware.insert_before "Rack::ETag", "Rack::Deflater",那么ETag会在请求之间变得一致。我仍然没有得到304,但我认为这是因为不正确的缓存控制头并且与原始问题无关。希望这有助于将来的某个人。