Ruby on Railsは、無効にする/オフにする方法のETag
-
21-09-2019 - |
質問
ご挨拶、
私は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
のセッターメソッドがあります、これは
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を追加しません