2010-09-13 6 views
18

में इष्टतम http कैशिंग हेडर और सर्वर पैराम्स सेट करना मेरे पास एक एएसपी.Net साइट है (एमवीसी होने पर होता है, लेकिन यह यहां प्रासंगिक नहीं है) कुछ पृष्ठों के साथ मैं वास्तव में कैश करना चाहता हूं।एएसपी.NET एमवीसी और आईआईएस 7.5

विशेष रूप से मैं प्राप्त करने के लिए करना चाहते हैं:

  1. उत्पादन 2 घंटे के लिए सर्वर पर संचित।
  2. सर्वर परिवर्तन पर फ़ाइल सामग्री, कि उत्पादन कैश कि पेज
  3. 10 मिनट के लिए ब्राउज़र में कैश के लिए प्लावित किया जाना चाहिए (अगर यह यानी भी सर्वर मत पूछो ताजा कि)
  4. जब ब्राउज़र एक वास्तविक अनुवर्ती अनुरोध करता है, मैं इसे ईटैग का उपयोग करना चाहता हूं, ताकि संशोधित न होने पर सर्वर 304 लौटा सके।

-

  • 1) और 2) मैं Response.Cache.SetCacheability (HttpCacheability.Server)
  • मैं जानता हूँ कि 3 से प्राप्त कर सकते हैं) कर सकते हैं (ध्यान दें समय मान ऊपर संकेत केवल उदाहरण हैं) अधिकतम आयु और कैश-नियंत्रण का उपयोग करके हासिल किया जा सकता है: निजी
  • मैं Response.Cache.SetETagFromFileDependencies() के साथ etags उत्सर्जित कर सकता हूं;

लेकिन मैं सब इन बातों का प्राप्त करने के लिए एक साथ काम नहीं कर पा रहे। यहां मेरे पास है:

Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate); 
     Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
     Response.Cache.SetETagFromFileDependencies(); 
     Response.Cache.SetValidUntilExpires(true); 
     Response.Cache.SetMaxAge(TimeSpan.FromSeconds(60 * 10)); 

क्या परिदृश्य मैं संभव चाहता हूं? विशेष रूप से:

  • ब्राउज़र दोनों 3 और 4) कर सकते हैं? जब फ़ायरफ़ॉक्स स्थानीय कैश में समाप्त होने के बाद एक नया अनुरोध जारी करता है, तो यह वास्तव में सर्वर को पहले से प्रतिक्रिया करता है, लेकिन मुझे 200 प्रतिक्रिया मिलती है।
  • उपरोक्त चर जैसे सेटिंग, मैं आउटपुट कैशिंग की अवधि कहां सेट करूं?

किसी भी सुझाव के लिए धन्यवाद!

+0

"फ़ायरफ़ॉक्स ... वास्तव में ईटैग भेजता है" - आपका मतलब है * अगर-कोई नहीं-मैच *? और इस विशेष मामले में, क्या आपने 'SetETagFromFileDependencies()' का उपयोग करके मैन्युअल रूप से ईटीएजी उत्सर्जित किया? – bzlm

+0

सही, और हाँ। – Nik

+0

अनुवर्ती, यह कैसे हल किया गया था? और यह वास्तव में कैसे विफल रहा था? – harpo

उत्तर

1

मुझे यकीन नहीं है कि आपने अभी तक इस समस्या को हल किया है (कई महीने बाद ...), लेकिन यह होना चाहिए।

SetMaxAge को "गारंटीकृत" ताजा समय की राशि निर्धारित करनी चाहिए। यदि आप अतिरिक्त रूप से ईटाग भेजते हैं, तो आप संतुष्ट होंगे 3 & 4. आवश्यकताएं 1 & 2 आपके द्वारा उपयोग की जाने वाली सर्वर-साइड कैशिंग तंत्र के साथ ऑर्थोगोनली हल की जा सकती है: मैंने कभी इस तरह एएसपी.NET सर्वर-साइड कैश का उपयोग नहीं किया है, लेकिन यह लगभग निश्चित रूप से संभव है।

मैं SetRevalidation जैसे आपके प्रतिक्रियाओं से बाहरी शीर्षलेख हटा दूंगा - यह आवश्यक क्यों होगा?