My Rails 3.2应用程序通过#stale?
在请求中使用If-Modified-Since
HTTP标头,在响应中使用Last-Modified
标头来决定是否应该动态生成一些数据。这在开发中非常有效(无论是使用 webrick 还是 unicorn_rails),因为curl -D headers.txt
表明,如果提供了正确的If-Modified-Since
值,则会发送 304 响应,而 Last-Modified
标头将沿着请求数据发送。
不幸的是,一旦部署在nginx后面,If-Modified-Since
(提供正确的标头值)都不会传递给unicorn - 因此Rails应用程序 - 也不会Last-Modified
传播到客户端:请求是无条件生成的,响应永远不会包含正确的标头。
事实证明,nginx实际上并没有剥离任何东西。仪器显示控制器收到了If-Modified-Since
。Rails #stale?
收到一个包含不良结果的请求,这导致了一个nil
的争论,默默地吞下了它,随后忽略了与If-Modified-Since
的比较,并将Last-Modified
定位为nil
。