2013-06-27 39 views
4

我有電子標籤的一個非常簡單的控制器:E-標籤從響應頭失蹤軌道3.2/nginx的/ PHUSION通勤

class EtagsController < ApplicationController 
    before_filter :require_user 

    def index 
    if stale?(:etag => current_user) 
     render :layout => false 
    end 
    end 

end 

當我在我的本地開發環境中運行這個,第一個請求是一個200在迴應中帶有一個ETag。第二個請求提交了ETag,我得到了預期的304響應。

但是,當這在我的臨時或生產環境中執行時,響應中沒有ETag。

下面是我的臨時環境的請求和響應頭:

Request URL: /etags 
Request Method:GET 
Status Code:200 OK 

Request Headers 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:__utma=169165539.1455374302.1372358226.1372358226.1372358226.1; __utmb=169165539.1.10.1372358226; __utmc=169165539; __utmz=169165539.1372358226.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); user_credentials=4ffa15df84112d22434f121eed06c59a5c32cb9ab72cf6bf1e952a3993201b5dec2917a028d20d4b63c70a84c6a290c4d5c4673ce967efec6f139c161850bc37%3A%3A101; _session_id=d21671b70349653406442ee0716633b2 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 

Response Headers 
Cache-Control:must-revalidate, private, max-age=0 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Length:65 
Content-Type:text/html; charset=utf-8 
Date:Thu, 27 Jun 2013 18:37:10 GMT 
Server:nginx/1.4.1 + Phusion Passenger 3.0.19 
Status:200 
X-Powered-By:Phusion Passenger (mod_rails/mod_rack) 3.0.19 
X-Rack-Cache:miss 
X-Request-Id:620c1ab99a1af7b6dde62cee77fc59fe 
X-Runtime:0.205884 
X-UA-Compatible:IE=Edge,chrome=1 

林難倒。 爲什麼我的分段環境不能在我的控制器中使用ETag?

所涉及的技術:

  1. 的Phusion客運3.0.19
  2. 的nginx 1.4.1
  3. 的Rails 3.2.13

Thannks

+0

看來,回滾的nginx 1.2.7修復了這個。爲什麼?我如何配置更高版本的nginix以允許ETag? –

+0

我在PHP應用程序中看到同樣的問題。不幸的是,在1.4.1中,如果gzip打開,ETag被剝離。但1.2.7沒有這個問題。 – F21

回答

4

看來,nginx的>如果爲nginx啓用gzip,1.3將忽略來自應用程序服務器的電子標籤。我們在nginx中找不到解決方案,它允許我們從應用程序服務器傳遞電子標籤並對響應進行gzip壓縮。我認爲弱電子標籤可能適用於此,但nginx目前不支持它們。