سؤال

تحياتي

كيف يمكنني إيقاف ETag(s) في روبي على القضبان v2.3.5

عندما أقوم توجيه طلب إلى RoR/الهجين وهو ETag رأس الحالي.

تيا ،

-دانيال

هل كانت مفيدة؟

المحلول

أسهل بكثير:

config.middleware.delete Rack::ETag

نصائح أخرى

وضع response.etag = nil في ript_filter لا يعمل. يتم إنشاء 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

هناك etag طريقة setter على ActionController::Response الكائن ، الذي يحذف رأس ETAG HTTP إذا كان فارغًا ، لذلك يجب أن تكون قادرًا على مسحه في وحدة التحكم الخاصة بك (ربما في مرشح قبل):

response.etag = nil

لا أعتقد أنهم يعملون افتراضيًا.

ما أفهمه هو أنهم يحتاجون إلى ضبطها بشكل صريح باستخدام Stale؟/Fresh_ عندما الاتصال أو ما شابه.

أنا أعمل في القضبان 4 على WEBrick ، في محاولة للحصول على استجابة إلى ذاكرة التخزين المؤقت حتى تنتهي في وقت محدد كل يوم.يبدو أن ولدت السيارات ETag تتداخل مع انتهاء صلاحية ذاكرة التخزين المؤقت والذي هو السبب في أنني بحثت عن هذا الجواب.لم أجد أي شيء مفيد هنا ، ولكن لم تحل مشكلتي ، لذلك سوف أشارك.

tl;dr تعيين Last-Modified رأس

ولكن تعيين إلى ماذا ؟ في حالتي كنت أحاول تحسين خدمة ويب التي تم إرجاعها في نتائج عملية التي يتم تشغيلها في نفس الوقت كل يوم.ردي رؤوس انتهى تبدو مثل هذا:

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 ترجع الدالة بالضبط 24 ساعة أقل من getCacheTime وظيفة.يبدو أن وضع هذا وقمع ETag (آخر التحقق من صحة التخزين المؤقت رأس) على الأقل في بلدي الحالي بيئة التطوير.

لماذا لا تضيف A قبل _filter في وحدة تحكم التطبيق الخاصة بك والتي تحدد ETAG إلى NIL؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top