4

私はeタグを備えた非常に単純なコントローラーを持っています:

class EtagsController < ApplicationController
  before_filter :require_user

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

end

これをローカル開発環境で実行すると、最初のリクエストは 200 で、レスポンスに ETag が含まれています。2 番目の要求は 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 Passenger 3.0.19
  2. nginx 1.4.1
  3. レール 3.2.13

ありがとう

4

2 に答える 2

4

gzip が nginx で有効になっている場合、nginx > 1.3 はアプリケーション サーバーからの e-tag を無視するようです。nginx には、アプリケーション サーバーから e-tag を通過させて応答を gzip することを可能にする解決策が見つかりませんでした。これには弱い電子タグが機能する可能性があると思いますが、nginx は現在それらをサポートしていません。

于 2013-07-08T15:02:40.953 に答える
1

Nginx はまだ弱い etag をサポートしていません。おそらく1.7.xで:

http://forum.nginx.org/read.php?29,249380,249740#msg-249740

この回答は、ミドルウェアに強い etag を弱い etag に変換させる方法を提供します。

Railsの弱いETAG?

于 2014-05-09T18:30:34.173 に答える