質問

ご挨拶、

私はv2.3.5

はRuby on RailsでのETag(複数可)をオフにするにはどうすればよいです 私はETagヘッダRoRの/雑種への直接リクエストを行うと、

は存在している。

TIA、

-daniel

役に立ちましたか?

解決

はるかに簡単ます:

config.middleware.delete Rack::ETag

他のヒント

before_filterでresponse.etag = nilを置くことは動作しません。 ETagのは、応答が送信(すべてのレンダリングが行われた後のように、それは身体からcaluculatedです)で直前に生成されます。

無効の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

etagオブジェクト上の ActionController::Response のセッターメソッドがあります、これは

:あなただけの(おそらく前フィルターに)あなたのコントローラでそれをクリアすることができるはずですので、それの空白の場合はETagをHTTPヘッダを削除
response.etag = nil

私は、彼らがデフォルトでオンになっているとは思わない。

私の理解では、彼らが明示的に古い?/ fresh_whenコールまたは類似を使用して設定する必要があるということです。

私はそれが毎日特定の時間に期限が切れるまで、キャッシュへの応答を取得しようと、WEBrickに上のRails 4で働いています。自動生成されたETagが、私はこの答えを探し理由で期限切れキャッシュに干渉しているように見えます。私はここで役に立つ何かを見つけることができませんでしたが、私は共有しますので、私は、私の問題を解決しました。

TL; DRセットLast-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
正確に24時間以下のgetCacheTime の関数よりも

のgetLastModified の関数が返します。これを設定すると、少なくとも私の現在の開発環境でのETag(別の検証キャッシングヘッダ)を抑制することを思わます。

なぜ皆無?

へのETagを設定し、アプリケーションコントローラにbefore_filterを追加しません
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top