HTTP में कैश कंट्रोल हेडर के लिए अधिकतम मूल्य


80

मैं अपनी वेबसाइट के लिए स्थैतिक संपत्ति की सेवा करने के लिए Amazon S3 का उपयोग कर रहा हूं। मैं चाहता हूं कि ब्राउज़र इन संपत्तियों को यथासंभव लंबे समय तक कैश करें। मुझे अपनी संपत्ति के साथ मेटा-डेटा हेडर क्या शामिल करना चाहिए

Cache-Control: max-age=???

संभव अधिकतम आयु मान ब्राउज़र / संस्करण और रास्ते में किसी भी प्रॉक्सी पर निर्भर है ... AFAIK वास्तविक मानक / कल्पना नहीं है, इसलिए कोई भी मूल्य एक अनुमान होगा ...
याहिया

जवाबों:


120

आम तौर पर एक वर्ष को मानक अधिकतम मूल्य के रूप में सलाह दी जाती है। RFC 2616 देखें :

एक प्रतिक्रिया के रूप में "कभी भी समाप्त नहीं होता है" को चिह्नित करने के लिए, एक मूल सर्वर उस प्रतिक्रिया को भेजे जाने के समय से लगभग एक वर्ष की समाप्ति की तारीख भेजता है। HTTP / 1.1 सर्वर भविष्य में एक वर्ष से अधिक समय की समाप्ति की तारीख नहीं भेजते।

यद्यपि यह पुराने expiresमानक पर लागू होता है , यह cache-controlकिसी भी स्पष्ट मानक मार्गदर्शन की अनुपस्थिति में भी लागू करने के लिए समझ में आता है । यह तब तक है जब तक आपको आम तौर पर किसी भी तरह की आवश्यकता होती है और किसी भी उपयोगकर्ता-एजेंटों को मनमाने ढंग से लंबे समय तक मूल्य उठा सकता है। इसलिए:

Cache-Control: max-age=31536000

22

"जब तक संभव हो," के लिए इसे संग्रहीत न करने पर विचार करें और इसके बजाय जब तक उचित हो तब तक निपटाने। उदाहरण के लिए, यह संभव नहीं है कि आप इसे 10 वर्ष से अधिक समय तक कैश करने की आवश्यकता कहें ... क्या मैं सही हूं?

RFC यहां अधिकतम आयु की चर्चा करता है: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

एरिक लॉरेंस का कहना है कि IE9 से पहले, इंटरनेट एक्सप्लोरर कैश-कंट्रोल के साथ किसी भी संसाधन को बासी के रूप में मानेगा: अधिकतम आयु मूल्य 2147483648 (2 ^ 31) सेकंड, लगभग 68 वर्ष ( http://blogs.msdn.b) /ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspp )।

अन्य उपयोगकर्ता एजेंट निश्चित रूप से अलग-अलग होंगे, इसलिए ... एक अतिप्रवाह का कारण बनने के लिए एक संख्या चुनें और संभावना नहीं है (संभावना के बजाय!)। अधिकतम आयु ३१५३६००० (एक वर्ष) से ​​कम नहीं है, और अनौपचारिक रूप से यह एक उचित अधिकतम मूल्य माना जाता है।


मैं वास्तव में भेजने के लिए विशिष्ट हेडर की तलाश कर रहा हूं। मेरे पास अपनी वेबसाइट में बनाया गया एक तंत्र है जो फ़ाइल के url को बदलने के लिए एक अलग फ़ाइलनाम की ओर इशारा करता है अगर मुझे बदलाव करने की आवश्यकता है और आगंतुकों को इसे देखना है। मुझे इन संपत्तियों को अनिश्चित काल तक कैश करने के लिए ब्राउज़र प्राप्त करने के लिए विशिष्ट हेडर का एक उदाहरण चाहिए।
केसी फ्लिन

12
कैश-कंट्रोल: अधिकतम आयु = 31536000 इसे 1 वर्ष के लिए कैश करेगा, जो कि अधिकतम अनुशंसित है।
एरिकला

2
@Geoffrey: मुझे लगता है कि आप केसी के निर्माण के बारे में उलझन में हैं। वह बस यह कह रहा है कि संस्करण बदलते समय वह अपने मार्कअप में संदर्भित URL को बदल देगा। यह सबसे शीर्ष साइटों द्वारा उपयोग किया जाने वाला एक सर्वोत्तम अभ्यास है।
एरिकलाव

@Geoffrey क्या आपको यकीन है कि यह "2147483648 से अधिक" है? मैंने सोचा था कि यह "2147483647 से अधिक" था?
पैसिफायर

4

जिन लोगों ने अधिकतम 1 वर्ष की कैशिंग की सिफारिश बनाई थी, उन्होंने इसे ठीक से नहीं सोचा था।

सबसे पहले, अगर किसी आगंतुक को एक पुरानी कैश्ड फ़ाइल परोसी जा रही है, तो उसे 1 साल बाद अचानक नया संस्करण लोड करने का कोई लाभ क्यों मिलेगा? यदि किसी फ़ाइल का कार्यात्मक दृष्टिकोण से 1 वर्ष का TTL है, तो इसका स्पष्ट अर्थ है कि फ़ाइल को बदलने का इरादा नहीं है।

तो 1 वर्ष से अधिक की आवश्यकता क्यों होगी?

1) क्यों नहीं? यह आगंतुकों के ब्राउज़र को बताने के लिए किसी भी उद्देश्य से सर्वर नहीं करता है "हे, यह फ़ाइल 1 वर्ष पुरानी है, यह जांचने का विचार हो सकता है कि क्या इसे अपडेट किया गया है"।

2) सीडीएन सेवाएं।अधिकांश सामग्री वितरण नेटवर्क यह तय करने के लिए कैश हेडर का उपयोग करते हैं कि एज सर्वर से किसी फाइल को कुशलता से कैसे परोसें। यदि आपके पास फ़ाइलों के लिए 1 वर्ष का कैश कंट्रोल है, तो यह कुछ समय में मूल सर्वर से गैर-परिवर्तित फ़ाइलों को फिर से अनुरोध करना शुरू कर देगा, और एज-कैश को पूरी तरह से फिर से आबाद करने की आवश्यकता होगी, जिससे क्लाइंट के लिए धीमे लोड हो सकते हैं, और अनावश्यक उत्पत्ति के लिए कहता है।

अधिकतम 1 वर्ष होने की क्या बात है? 31536000 से अधिक राशि सेट पर कौन से ब्राउज़र चोक करेंगे?


3
1 वर्ष इंटरनेट युग में एक अनंत काल है। साथ ही यदि आप गंभीरता से कैशिंग लेते हैं तो आप अंतिम-संशोधित और / या etag तंत्र को कैश-कंट्रोल के अलावा संभाल लेंगे। तो उन लोगों को भी एक साल बाद फिर से बैंडविड्थ नुकसान नहीं पहुँचाएगा (304 संशोधित नहीं)
10

2
जब आपकी छवियां कभी-कभी बदली जाती हैं (जैसे इंटरनेट पर सबसे अधिक छवियां), और जब आप सीडीएन को मूल से फ़ाइलें ताज़ा नहीं करना चाहते हैं (जो व्यर्थ होगा) 1 साल का समय नहीं है। अंतिम रूप से संशोधित / etag के लिए, बेशक जो क्लाइंट और सर्वर के बीच एक अनुरोध और संवाद शुरू करता है, बस यह पता लगाने के लिए कि हम पहले से ही "हाँ, इसके कैश्ड फ़ाइल की सेवा करने के लिए अभी भी ठीक है" क्या जानते हैं। आपका तर्क मूल रूप से "1 वर्ष इंटरनेट पर एक अनंत काल" है, जो कुछ भी उत्पादक नहीं करता है। मैंने छवियों पर 10 साल की अवधि निर्धारित की है, जो बस एक बेहतर परिणाम प्रदान करता है।
suncat100

3
ओह और डिफ़ॉल्ट ब्राउज़र कैश आकार भी है। क्या कोई कैश की गई संपत्ति ब्राउज़र कैश में एक वर्ष बच जाएगी? मुझे नहीं पता।
12:22 पर रेडबैन

बहुत संभावना नहीं। कुछ ऐसा जो आगे चलकर "1 वर्ष" स्थापित करने की व्यर्थता को साबित करता है जब यह किसी वस्तु को "हमेशा" या "जब तक संभव हो" कैश करने के प्रयास के अलावा कोई अन्य उद्देश्य नहीं देता है ...
suncat100

यह ब्राउज़र कैशिंग के बारे में नहीं है। यह इस तरह के अकामाई और वार्निश और गूगल के मोबाइल प्रॉक्सी आदि के रूप में यह कैशिंग मध्यवर्ती प्रॉक्सी के बारे में है
एलिजा लिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.