इस प्रतिक्रिया को कैश क्यों किया जा रहा है?


32

मेरे पास एक क्लाइंट है जिसकी साइट का index.html वर्तमान में इन हेडर के साथ वापस आता है:

स्वीकार-रंग: बाइट्स
कनेक्शन: कीप-अलाइव
सामग्री-एनकोडिंग: gzip
सामग्री-लंबाई: 3658
सामग्री-प्रकार: पाठ / html
दिनांक: गुरु, 10 अक्टूबर 2013 07:36:27 GMT
ETag: "4aa95e1-2ed2-4e721324728b7"
कीप-अलाइव: टाइमआउट = ५, अधिकतम = १००
अंतिम-संशोधित: Tue, 24 Sep 2013 13:34:30 GMT
सर्वर: Apache / 2.2.22
वैरी: स्वीकार-एनकोडिंग, उपयोगकर्ता-एजेंट

मैं स्पष्ट रूप से यह अनुशंसा करने जा रहा हूं कि वे जोड़ दें Expiresया Cache-Controlउपयुक्त हों, लेकिन मैं भ्रमित हूं: Chrome इस संसाधन को कैश करता है और इसे कैश से उपयोग करता है ( सभी को अनुरोध नहीं भेज रहा है ), कई घंटों के बाद भी (उदाहरण के लिए, यह एक प्रतिलिपि का पुन: उपयोग करता है यह कल दोपहर 1:30 बजे सुबह 8:30 बजे समाप्त हुआ। मैं इसे क्रोम कंसोल के नेटवर्क टैब में स्पष्ट रूप से देख सकता हूं, जहां यह अनुरोध दिखाता है और स्थिति कॉलम में और आकार कॉलम 200 (OK)में ग्रे है । (मैंने Chrome की कैशिंग चूक को नहीं बदला है)(from cache)

मुझे एहसास है कि युक्ति उपयोगकर्ता एजेंटों को हेडर से दिशा के अभाव में अपना निर्णय लेने की अनुमति देती है । क्या यहाँ वही हो रहा है? Chrome देखता है कि इसे कई दिनों पहले अंतिम रूप से संशोधित किया गया था और ऐसा लगता है कि यह उस संस्करण का उपयोग करने के लिए स्वतंत्र है जो (कहते हैं) एक दिन से अधिक है? या मुझे कुछ याद आ रहा है?

जवाबों:


33

जब "समय-सीमा समाप्त" और "कैश-नियंत्रण" हेडर निर्दिष्ट नहीं हैं, लेकिन एक "Last-Modified" शीर्षक है निर्दिष्ट, ब्राउज़र कितनी देर तक वे कैश में दस्तावेज़ रखना चाहिए पर लगता है कि करने के लिए है। कुछ ब्राउज़र करना उपयोग एल्गोरिदम कि पेज जाने के एक दिन या उससे अधिक के लिए कैश में रहते हैं।

Google कैशिंग सर्वोत्तम अभ्यास मार्गदर्शिका बताती है:

अंतिम-संशोधित एक "कमजोर" कैशिंग हेडर है जिसमें ब्राउज़र यह निर्धारित करने के लिए एक हेयूरिस्टिक लागू करता है कि क्या कैश से आइटम लाना है या नहीं। (अलग-अलग ब्राउज़रों के बीच आंकड़े अलग-अलग हैं।)


मोज़िला (फ़ायरफ़ॉक्स) का एक HTTP कैशिंग एफएक्यू है जो इस स्थिति के लिए उनके एल्गोरिथ्म को रेखांकित करता है (हालांकि यह संभव है कि एल्गोरिथ्म दस्तावेज़ 2002 की तारीख से बदल गया है):

... हम "अंतिम-संशोधित" शीर्ष लेख की तलाश करते हैं। यदि यह शीर्ष लेख मौजूद है, तो कैश की ताजगी जीवनकाल "दिनांक" हेडर के मान के बराबर है जो 10 से विभाजित "अंतिम-संशोधित" हेडर का मान है।

तो आपके मामले में जहां संशोधित और अब 15 दिनों के बीच का अंतर है, तो फ़ायरफ़ॉक्स संसाधन को 1.5 दिनों के लिए कैश करेगा।

ऐसा प्रतीत होता है कि सभी प्रमुख ब्राउज़र समान 10% नियम का उपयोग करते हैं जो फ़ायरफ़ॉक्स लागू करता है। StackOveflow पर एक प्रश्न इन उत्तराधिकारियों से पूछा गया है । अलग-अलग ब्राउज़रों के लिए अलग-अलग उत्तर बताते हैं कि वे सभी समान कार्यान्वयन हैं। इंटरनेट एक्सप्लोरर, और वेबकिट (क्रोम और सफारी) के उत्तर हैं।


ब्राउज़र के कैश का आकार संभवतः एक फ़ाइल के लिए सीमित कारक होगा जिसे कैशिंग एल्गोरिथ्म निर्धारित करता है कि उसे एक दिन से अधिक समय तक रखा जा सकता है। ब्राउज़रों के पास आमतौर पर कैश के लिए उपयोग किए जाने वाले डिस्क स्थान की मात्रा के लिए एक सेटिंग होती है। कई उपयोगकर्ता अपने ब्राउज़र को बंद करने पर अपना कैश भी साफ़ करते हैं। तो जिस समय के लिए ऐसी फ़ाइल कैश की जाती है, वह आमतौर पर निर्भर करती है:

  • ब्राउज़र ने कितनी कैश स्पेस आवंटित की है
  • उन वेबसाइटों की संख्या जो उपयोगकर्ता जाते हैं (और उन साइटों का आकार)
  • उपयोगकर्ता ने अपना ब्राउज़र बंद किया है या नहीं

क्या आप कृपया स्पष्ट कर सकते हैं "फिर फ़ायरफ़ॉक्स संसाधन को 1.5 दिनों के लिए कैश करेगा।" किस तारीख से, यह 1.5 दिनों तक कैश करेगा? यदि यह पहले से ही 15 दिन का है, तो यह पहले ही समाप्त हो जाएगा, है ना? और अब के बाद से शून्य से अंतिम रूप से हमेशा के लिए संशोधित किया जाएगा, आपका मतलब है, यह हमेशा के लिए कैश हो जाएगा!
myDoggyWritesCode

1
हमेशा के लिए नहीं। अंतिम संशोधित शीर्ष लेख और डाउनलोड के समय के बीच 1/10 समय के लिए। यदि आपके लिए 15 दिन हो गए हैं तो इसका मतलब यह हो सकता है कि फाइल को अंतिम बार संशोधित किए जाने के 150 दिन हो चुके हैं।
स्टीफन Ostermiller
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.