9

ご挨拶、

Ruby on Rails v2.3.5 で ETag をオフにする方法

RoR/Mongrel に直接リクエストすると、ETag ヘッダーが存在します。

ティア、

-ダニエル

4

6 に答える 6

26

はるかに簡単:

config.middleware.delete Rack::ETag
于 2012-04-19T11:31:06.897 に答える
4

before_filter を入れresponse.etag = nilても機能しません。etag は、応答が送信される直前に生成されます (すべてのレンダリングが完了した後、本文から計算されます)。

etag の使用と生成を無効にする (したがって、md5 に費やす時間を節約する) ための適切な回避策は、次のモンキー パッチです。

module ActionController
  class Request
    # never match any incomming etag
    def etag_matches?(etag)
      false
    end
  end

  class Response
    # fake rails that our response already has an etag set and so none is generated automatically
    def etag?
      true
    end
  end
end
于 2010-05-06T07:03:24.910 に答える
1

etagオブジェクトにはセッター メソッドがありActionController::Response、ETag HTTP ヘッダーが空白の場合は削除されるため、コントローラーでそれをクリアできるはずです (おそらく before フィルターで)。

response.etag = nil
于 2010-01-19T09:20:31.430 に答える
0

私はWEBrickのRails 4で作業しており、毎日特定の時間に有効期限が切れるまでキャッシュへの応答を取得しようとしています。自動生成された ETag が有効期限キャッシュに干渉しているように見えるため、この回答を検索しました。ここで役立つものは何も見つかりませんでしたが、問題は解決したので共有します。

tl;drLast-Modifiedヘッダーを設定します

しかし、それを何に設定しますか?私の状況では、毎日同時に実行されるプロセスの結果を返す Web サービスを最適化しようとしていました。私の応答ヘッダーは次のようになりました。

response.headers['Cache-Control'] = "max-age=86400"
response.headers['Expires'] = getCacheTime
response.headers['Last-Modified'] = getLastModified

最初に、Cache-Controlヘッダーを明示的に記述して、デフォルトが何であれ上書きします。有効期限ヘッダーの最大値と一致するように、24 時間に設定しました。次のような関数で有効期限ヘッダーを設定します。

def getCacheTime
    now = Time.now.utc
    cacheTime = Time.utc(now.year, now.month, now.day, 22, 00, 00)
    if now > cacheTime
        cacheTime = cacheTime + (60 * 60 * 24)
    end

    cacheTime.httpdate
end

getLastModified関数は、 getCacheTime関数よりも正確に 24 時間少ない時間を返します。これを設定すると、少なくとも現在の開発環境では ETag (別の検証キャッシュ ヘッダー) が抑制されるようです。

于 2016-10-05T17:08:14.307 に答える
0

デフォルトではオンになっていないと思います。

私の理解では、stale?/fresh_when 呼び出しなどを使用して明示的に設定する必要があります。

于 2010-01-19T00:29:47.967 に答える
-1

etag を nil に設定する before_filter をアプリケーション コントローラに追加してみませんか?

于 2010-03-05T09:45:52.857 に答える