2009-02-18 16 views
13

साथ नियंत्रण समाप्त अपाचे के mod_expires मॉड्यूल में, वहाँ दो आधार समय अवधि, पहुँच, और संशोधन साथ Expires निर्देश है।कैश अंतिम संशोधन

ExpiresByType text/html "access plus 30 days" 

समझ में आता है कि कैश 30 दिनों के बाद ताजा सामग्री के लिए अनुरोध करेगा।

हालांकि,

ExpiresByType text/html "modification plus 2 hours" 

सहज मतलब नहीं है।

ब्राउज़र कैश कैसे पता चलता है कि जब तक यह सर्वर से अनुरोध नहीं करता है तब तक फ़ाइल को संशोधित किया गया है? और यदि यह सर्वर पर कॉल कर रहा है, तो इस निर्देश को कैशिंग करने का क्या उपयोग है? ऐसा लगता है कि मैं कैशिंग के कुछ महत्वपूर्ण हिस्से को समझ नहीं रहा हूं। कृपया मुझे ज्ञान दो।

उत्तर

35

एक Expires* "संशोधन" के साथ निर्देश के रूप में इसके आधार के रूप में सर्वर पर फ़ाइल के संशोधन समय को संदर्भित करता है। इसलिए यदि आप सेट करते हैं, तो "संशोधन प्लस 2 घंटे", फ़ाइल को संशोधित करने के 2 घंटे बाद सामग्री का अनुरोध करने वाले किसी भी ब्राउज़र (सर्वर पर) फ़ाइल के संशोधन समय के 2 घंटे बाद तक उस सामग्री को कैश करेगा। और ब्राउज़र जानता है कि वह समय कब है क्योंकि सर्वर उचित समाप्ति समय के साथ Expires शीर्षलेख भेजता है।

मुझे एक उदाहरण के साथ स्पष्ट करने दें: कहते हैं कि अपने अपाचे विन्यास लाइन

ExpiresDefault modification plus 2 hours 

भी शामिल है और आप एक फ़ाइल index.html, जो ExpiresDefault निर्देश पर लागू होता है, सर्वर पर है। मान लीजिए कि आप index.html का संस्करण 9:53 जीएमटी पर अपलोड करते हैं, पिछले मौजूदा index.html (अगर वहां कोई था) को ओवरराइट कर रहा है। तो अब index.html का संशोधन समय 9:53 जीएमटी है। आप (Windows पर या dir) सर्वर पर ls -l चल रहे थे, तो आप इसे सूची में दिखाई देंगे:

-rw-r--r-- 1 apache apache 4096 Feb 18 09:53 index.html 

अब, हर अनुरोध के साथ, अपाचे Last-Modified हेडर फाइल के अंतिम संशोधन समय के साथ भेजता है। चूंकि आपके पास ExpiresDefault निर्देश है, इसलिए यह Expires हेडर भी फ़ाइल के संशोधित समय (9:53) और दो घंटों के बराबर समय के साथ भेज देगा।

Last-Modified: Wed, 18 Feb 2009 09:53:00 GMT 
Expires: Wed, 18 Feb 2009 11:53:00 GMT 

समय जिस पर ब्राउज़र इस अनुरोध को 11:53 GMT से पहले, ब्राउज़र पृष्ठ कैश होगा, क्योंकि यह अभी तक समाप्त नहीं हुई है है बनाता है: तो यहाँ क्या ब्राउज़र देखता है का हिस्सा है।तो यदि उपयोगकर्ता पहले 11:00 GMT पर पृष्ठ पर जाता है, और उसके बाद उसी पृष्ठ पर फिर से 11:30 GMT पर जाता है, तो ब्राउज़र देखेंगे कि इसका कैश संस्करण अभी भी मान्य है और नहीं (या बल्कि, इसकी अनुमति नहीं है) एक नया HTTP अनुरोध करें।

उपयोगकर्ता 12:00 GMT पर तीसरी बार पृष्ठ पर जाता है, तो ब्राउज़र देखता है कि अपने कैश्ड संस्करण अब समाप्त हो गया है (यह 11:53 के बाद है) तो यह करने के लिए एक अनुरोध भेजने, पृष्ठ को मान्य करने का प्रयास एक if-modified- के बाद से हेडर के साथ सर्वर। किसी भी शरीर के साथ 304 (संशोधित नहीं) प्रतिक्रिया वापस कर दी जाएगी क्योंकि पेज की तारीख को पहले से ही सेवा के बाद बदल दिया नहीं गया है। चूंकि समाप्ति तिथि बीत चुकी है - पृष्ठ 'पुराना' है - वैधता अनुरोध तब तक किया जाएगा जब सत्यापन विफल होने तक पृष्ठ का दौरा किया जाता है।

अब, आइए दिखाएं कि आपने पृष्ठ का एक नया संस्करण 11:57 पर अपलोड किया है। इस मामले में, ब्राउज़र की 12:00 पर पेज के पुराने संस्करण को मान्य करने के प्रयास विफल रहता है और यह जवाब में प्राप्त करता है नया पृष्ठ के साथ-साथ, इन दो नए हेडर:

Last-Modified: Wed, 18 Feb 2009 11:57:00 GMT 
Expires: Wed, 18 Feb 2009 13:57:00 GMT 

(अंतिम संशोधन समय फ़ाइल का नया संस्करण अपलोड होने पर 11:57 हो जाता है, और अपाचे 11:57 + 2:00 = 13:57 GMT के रूप में समाप्ति समय की गणना करता है।)

प्रमाणीकरण (अधिक हाल की तारीख का उपयोग) नहीं होगा अब 13:57 तक जरूरी है।

+0

हाय डेविड के दौरान होता है, यह समझ में आता है, हालांकि मुझे अभी भी यकीन नहीं है, सर्वर क्यों ब्राउज़र और ब्राउज़र भेजने के लिए जानता है। इसलिए यदि मैं सही समझता हूं, अगली बार ब्राउज़र संसाधन का अनुरोध कर रहा है, तो सर्वर किसी भी तरह से ब्राउज़र में फाइल संशोधन स्थिति के बारे में जानकारी भेजता है - लेकिन यह –

+0

नहीं मिला है, मुझे लगा कि यह एक उदाहरण के साथ व्याख्या करना सबसे आसान होगा, इसलिए मैंने एक में संपादित किया ... –

+0

आपके समय –

0

मेरी समझ यह है कि संशोधन ब्राउज़र को अंतिम-संशोधित HTTP शीर्षलेख के मान के आधार पर कैश समय को आधार देने के लिए कहता है। तो, संशोधन प्लस 2 घंटे अंतिम-संशोधित समय + 2 घंटे होगा।

3

सर्वर एक शीर्षलेख भेजता है जैसे: "Last-Modified: Wed, 18 Feb 2009 00:00:00 GMT"। कैश या तो इस हेडर या एक्सेस समय के आधार पर व्यवहार करता है।

कहें कि सामग्री को हर दिन रीफ्रेश होने की उम्मीद है, तो आप इसे "संशोधन के साथ 24 घंटे" समाप्त करना चाहते हैं।

यदि आपको नहीं पता कि सामग्री को रीफ्रेश किया जाएगा, तो इसे एक्सेस समय पर आधार देना बेहतर होगा।

+0

हाय एंड्रयू, आपके उत्तर के लिए धन्यवाद। सर्वर कब और कितनी बार अंतिम संशोधित शीर्षलेख भेजता है? या यह ब्राउज़र सत्र –

0

सबसे पहले, धन्यवाद डेविड Z तक विस्तृत विवरण के लिए ऊपर (बेशक ध्यान दें कि कई अन्य चीजें दो हेडर मैं उपरोक्त के साथ भेजा जाता है, मैं सिर्फ बाहर सादगी के लिए सभी बाकी छंटनी) । बुशमैन के सवाल के जवाब में अगर सर्वर को अभी भी अनुरोध करने की आवश्यकता है तो कैशिंग को आमंत्रित करने का अर्थ क्यों होता है, जवाब यह है कि सर्वर द्वारा लौटाए गए समय में सहेजा जाता है। यदि कैश निर्देश इंगित करते हैं कि सामग्री की वापसी के बजाय फ़ाइल की सामग्री अभी भी ताजा है, तो खाली प्रतिक्रिया निकाय के साथ 304 कोड वापस कर दिया जाता है। वह समय है जहां समय बचाया गया है।

एक बेहतर व्याख्या की तुलना में मैं दे दिया है यहाँ है, https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers से:

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

समय आधारित

एक समय आधारित सशर्त अनुरोध सुनिश्चित करता है कि केवल यदि अनुरोध किया गया संसाधन के बाद से ब्राउज़र की कैश्ड प्रतिलिपि था बदल गया है सामग्री हस्तांतरित किया जाएगा। यदि कैश की गई प्रति सबसे अद्यतित है तो सर्वर 304 प्रतिक्रिया कोड देता है।

सशर्त अनुरोध सक्षम करने के लिए एप्लिकेशन अंतिम-संशोधित प्रतिक्रिया शीर्षलेख के माध्यम से संसाधन के अंतिम संशोधित समय को निर्दिष्ट करता है।

कैश-नियंत्रण: सार्वजनिक, अधिकतम उम्र = 31,536,000 Last-Modified: सोमवार, 03 जनवरी 2011 17:45:57 GMT

अगली बार ब्राउज़र इस संसाधन यह केवल सामग्री के लिए पूछेंगे का अनुरोध करता है संसाधन अगर वे इस तिथि का उपयोग कर के बाद से अपरिवर्तित रहे हैं की यदि संशोधित के बाद से अनुरोध हेडर

यदि संशोधित के बाद से: सोमवार, 03 जनवरी 2011 17:45:57 GMT

तो संसाधन hasn ' सोम के बाद से बदल गया, 03 जनवरी 2011 17:45:57 जीएमटी सर्वर 304 प्रतिक्रिया कोड के साथ एक खाली शरीर के साथ वापस आ जाएगा।

संबंधित मुद्दे