जवाबों:
मेरे पास यही सवाल था, और मेरी खोजों में कुछ जानकारी मिली (आपका प्रश्न परिणामों में से एक के रूप में सामने आया)। यहाँ मैंने निर्धारित किया है ...
Cache-Control
हेडर के दो पहलू हैं । एक पक्ष वह है जहां इसे वेब सर्वर (उर्फ "मूल सर्वर") द्वारा भेजा जा सकता है। दूसरा पक्ष वह है जहां इसे ब्राउज़र (उर्फ "उपयोगकर्ता एजेंट") द्वारा भेजा जा सकता है।
मेरा मानना है कि max-age=0
बस कैश (और उपयोगकर्ता एजेंट) बताता प्रतिक्रिया से बासी है get-जाने के लिए और इसलिए वे चाहिए प्रतिक्रिया को दोबारा सत्यापित (जैसे। साथ If-Not-Modified
हेडर) एक कैश्ड प्रति उपयोग करने से पहले, जबकि, no-cache
उन्हें बताता है कि वे चाहिए एक कैश्ड उपयोग करने से पहले दोबारा सत्यापित कॉपी। से 14.9.1 क्या संचित करने योग्य है :
कोई कैश
... एक कैश मूल सर्वर के साथ सफल पुन: सत्यापन के बिना एक बाद के अनुरोध को पूरा करने के लिए प्रतिक्रिया का उपयोग नहीं करना चाहिए। यह एक मूल सर्वर को कैशे से भी कैशिंग को रोकने की अनुमति देता है जिसे क्लाइंट अनुरोधों के लिए बासी प्रतिक्रियाओं को वापस करने के लिए कॉन्फ़िगर किया गया है।
दूसरे शब्दों में, कैश कभी-कभी एक बासी प्रतिक्रिया का उपयोग करने के लिए चुन सकते हैं (हालांकि मेरा मानना है कि उन्हें तब एक Warning
हेडर जोड़ना होगा ), लेकिन no-cache
कहते हैं कि उन्हें बासी प्रतिक्रिया का उपयोग करने की अनुमति नहीं है, चाहे कुछ भी हो। हो सकता है आप चाहते हैं चाहिए -revalidate व्यवहार जब बेसबॉल आँकड़े एक पेज में उत्पन्न कर रहे हैं, लेकिन आप चाहते हैं MUST -revalidate व्यवहार है जब आप किसी ई-कॉमर्स खरीद के जवाब तैयार किया है।
हालाँकि आप अपनी टिप्पणी में सही हैं जब आप कहते हैं कि no-cache
भंडारण को रोकने के लिए नहीं है, तो उपयोग करते समय यह वास्तव में एक और अंतर हो सकता है no-cache
। मैं एक पृष्ठ भर में आया, कैश कंट्रोल के निर्देश डिमिस्टिफाई हुए , जो कहता है (मैं इसकी शुद्धता के लिए व्रत नहीं कर सकता):
व्यवहार में, IE और फ़ायरफ़ॉक्स ने नो-कैश निर्देश का इलाज करना शुरू कर दिया है जैसे कि यह ब्राउज़र को पृष्ठ को कैश नहीं करने का निर्देश देता है। हमने लगभग एक साल पहले इस व्यवहार को देखना शुरू किया। हमें संदेह है कि कैशिंग को रोकने के लिए इस निर्देश के व्यापक (और गलत) उपयोग से यह परिवर्तन हुआ।
...
ध्यान दें कि देर से, "कैश-कंट्रोल: नो-कैश" ने भी "नो-स्टोर" निर्देश की तरह व्यवहार करना शुरू कर दिया है।
एक तरफ के रूप में, यह मुझे प्रतीत होता है कि Cache-Control: max-age=0, must-revalidate
मूल रूप से एक ही चीज का मतलब होना चाहिए Cache-Control: no-cache
। तो हो सकता है कि MUST -revalidate व्यवहार प्राप्त करने का एक तरीका है no-cache
, जबकि no-cache
एक ही काम करने के स्पष्ट प्रवास से बचना no-store
(जैसे? कोई कैशिंग नहीं है)?
मेरा मानना है कि shahkalpesh का उत्तर उपयोगकर्ता एजेंट पक्ष पर लागू होता है। आप 13.2.6 को देख कर कई जवाबों को अस्वीकार कर सकते हैं ।
यदि कोई उपयोगकर्ता एजेंट Cache-Control: max-age=0
(aka। "एंड-टू-एंड रिवाइडलेशन") के साथ एक अनुरोध भेजता है , तो रास्ते में प्रत्येक कैश इसकी कैश प्रविष्टि (जैसे If-Not-Modified
हेडर के साथ ) मूल सर्वर के लिए सभी तरह से अमान्य होगा । यदि उत्तर है तो 304 (संशोधित नहीं) है, कैश्ड इकाई का उपयोग किया जा सकता है।
दूसरी ओर, Cache-Control: no-cache
(उर्फ "एंड-टू-एंड रीलोड" के साथ एक अनुरोध भेजना ) अमान्य नहीं होता है और जवाब देते समय सर्वर कैश्ड कॉपी का उपयोग नहीं करता है ।
must-revalidate
के रूप में ही उपलब्ध कराना नहीं है no-cache
या no-store
। बाद वाला बाईपास पूरी तरह से बंद हो जाता है, लेकिन पूर्व का कहना है कि कैश को हमेशा ताजगी के लिए जांचना चाहिए, लेकिन अगर यह अभी भी चालू है, तो इसका उपयोग किया जा सकता है, इसलिए बैंडविड्थ की बचत। उत्तरार्द्ध पूरी तरह से अंत-समय पर हर समय डाउनलोड करता है, अनावश्यक बैंडविड्थ और देरी से प्रतिक्रियाएं लेता है।
no-cache
नहीं करती है " या "हर समय पूर्ण अंत-टू-एंड डाउनलोड को मजबूर करती है", कम से कम सभी ब्राउज़रों में नहीं। विनिर्देश केवल यह कहता है कि ब्राउज़र को कैश को मान्य करना चाहिए।
अधिकतम उम्र = 0
यह ताज़ा करने के लिए क्लिक करने के बराबर है , जिसका अर्थ है, मुझे नवीनतम प्रतिलिपि दें जब तक कि मेरे पास पहले से नवीनतम प्रतिलिपि न हो।
कोई कैश
यह रीफ़्रेश करते समय Shift पकड़ रहा है , जिसका अर्थ है, बस फिर से सब कुछ फिर से करें चाहे जो भी हो।
no-store
पुराना सवाल अब, लेकिन अगर किसी और ने मुझे खोज के माध्यम से इसे पार किया, तो ऐसा प्रतीत होता है कि IE9 बैक और फॉरवर्ड बटन का उपयोग करते समय संसाधनों के व्यवहार को कॉन्फ़िगर करने के लिए इसका उपयोग कर रहा है। जब अधिकतम-आयु = 0 का उपयोग किया जाता है, तो ब्राउज़र पिछले संस्करण का उपयोग करेगा जब एक बैकवर्ड / फॉरवर्ड प्रेस पर एक संसाधन को देखा जाएगा। यदि नो-कैश का उपयोग नहीं किया जाता है, तो संसाधन को फिर से भेज दिया जाएगा।
IE9 कैशिंग के बारे में अधिक जानकारी इस msdn कैशिंग ब्लॉग पोस्ट पर देखी जा सकती है ।
IE8 और फ़ायरफ़ॉक्स 3.5 के साथ मेरे हालिया परीक्षणों में, ऐसा लगता है कि दोनों आरएफसी-अनुरूप हैं। हालांकि, वे मूल सर्वर के लिए उनकी "मित्रता" में भिन्न हैं। IE8 no-cache
उसी शब्दार्थ के साथ प्रतिक्रियाओं का व्यवहार करता है max-age=0,must-revalidate
। हालाँकि, फ़ायरफ़ॉक्स 3.5, के no-cache
बराबर माना जाता है no-store
, जो प्रदर्शन और बैंडविड्थ उपयोग के लिए बेकार है।
स्क्वीड कैश, डिफ़ॉल्ट रूप से, no-cache
फ़ायरफ़ॉक्स की तरह हेडर के साथ कभी भी स्टोर नहीं करता है ।
मेरी सलाह है कि public,max-age=0
आप गैर-संवेदनशील संसाधनों के लिए सेट करें जिन्हें आप हर अनुरोध पर नए सिरे से जांचना चाहते हैं, लेकिन फिर भी कैशिंग के प्रदर्शन और बैंडविड्थ लाभ की अनुमति देते हैं। समान विचार वाले प्रति उपयोगकर्ता आइटम के लिए, उपयोग करें private,max-age=0
।
मैं no-cache
पूरी तरह से इसके इस्तेमाल से बचूंगा, क्योंकि ऐसा लगता है कि इसे कुछ ब्राउज़र और लोकप्रिय कैश द्वारा कार्यात्मक समकक्ष के रूप में प्रस्तुत किया गया है no-store
।
इसके अतिरिक्त, अकामाई और लाइमलाइट का अनुकरण न करें। जबकि वे अनिवार्य रूप से अपने प्राथमिक व्यवसाय के रूप में बड़े पैमाने पर कैशिंग सरणियों को चलाते हैं, और विशेषज्ञ होने चाहिए, उनके पास वास्तव में एक निहित स्वार्थ होता है जिससे उनके नेटवर्क से अधिक डेटा डाउनलोड किया जा सके। Google इम्यूलेशन के लिए एक अच्छा विकल्प नहीं हो सकता है, या तो। वे संसाधन के आधार पर उपयोग max-age=0
या no-cache
बेतरतीब ढंग से करने लगते हैं ।
private,max-age=0
।
अधिकतम उम्र जब एक मध्यवर्ती कैश को अधिकतम-आयु = 0 निर्देश के माध्यम से, अमान्य करने के लिए मजबूर किया जाता है अपने स्वयं के कैश प्रविष्टि, और ग्राहक ने अनुरोध में अपने स्वयं के सत्यापनकर्ता की आपूर्ति की है, आपूर्ति किए गए सत्यापनकर्ता वर्तमान में कैश प्रविष्टि के साथ संग्रहीत सत्यापनकर्ता से भिन्न हो सकते हैं। इस स्थिति में, कैश MAY या तो सत्यापनकर्ता का उपयोग बिना अपना अनुरोध करने के लिए करता है अर्थ पारदर्शिता को प्रभावित करना। हालाँकि, सत्यापनकर्ता की पसंद प्रदर्शन को प्रभावित कर सकती है। के लिए सबसे अच्छा तरीका है मध्यवर्ती कैश अपने अनुरोध करते समय अपने स्वयं के सत्यापनकर्ता का उपयोग करने के लिए। अगर सर्वर जवाब देता है 304 (संशोधित नहीं) के साथ, फिर कैश क्लाइंट को अपनी अब सत्यापित प्रति वापस कर सकता है 200 (ओके) प्रतिक्रिया के साथ। यदि सर्वर एक नई इकाई और कैश सत्यापनकर्ता के साथ उत्तर देता है, हालाँकि, मध्यवर्ती कैश लौटे सत्यापनकर्ता की तुलना में प्रदान किए गए के साथ तुलना कर सकता है ग्राहक के अनुरोध, मजबूत तुलना समारोह का उपयोग कर। यदि ग्राहक का सत्यापनकर्ता है मूल सर्वर के बराबर है, तो मध्यवर्ती कैश केवल 304 (नहीं) देता है संशोधित)। अन्यथा, यह 200 (OK) प्रतिक्रिया के साथ नई इकाई देता है। यदि अनुरोध में नो-कैश निर्देश शामिल है, तो इसमें मिन-फ्रेश शामिल नहीं होगा, अधिकतम-बासी, या अधिकतम-आयु।
सौजन्य: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
इसे उत्तर के रूप में स्वीकार न करें - मुझे इसका सही उपयोग समझने के लिए इसे पढ़ना होगा :)
मैं मुश्किल से एक कैशिंग विशेषज्ञ हूं, लेकिन मार्क नॉटिंघम है। यहां उनके कैशिंग डॉक्स हैं । संदर्भ अनुभाग में उनके उत्कृष्ट संबंध भी हैं।
उन डॉक्स के मेरे पढ़ने के आधार पर, ऐसा लगता है max-age=0
कि कैश को "उसी समय" में आए अनुरोधों पर कैश्ड प्रतिक्रिया भेजने की अनुमति दे सकती है , जहां "एक ही समय" का अर्थ है कि वे एक साथ पर्याप्त रूप से कैश में एक साथ दिखते हैं, लेकिन no-cache
नहीं ।
वैसे, यह ध्यान देने योग्य है कि कुछ मोबाइल डिवाइस, विशेष रूप से iPhone / iPad जैसे Apple उत्पाद पूरी तरह से हेडर को अनदेखा करते हैं जैसे कि नो-कैश, नो-स्टोर, एक्सपायर: 0, या जो कुछ भी आप उन्हें फिर से उपयोग न करने के लिए मजबूर करने की कोशिश कर सकते हैं। पेज बनाते हैं।
इसने हमें सिरदर्द का कोई अंत नहीं दिया है क्योंकि हम एक उपयोगकर्ता के iPad के मुद्दे को कहने की कोशिश करते हैं, एक पृष्ठ पर सोए जा रहे हैं जो वे एक फार्म प्रक्रिया के माध्यम से पहुंच गए हैं, चरण 2 से 3 कहते हैं, और फिर डिवाइस पूरी तरह से स्टोर को अनदेखा करता है / कैश निर्देश, और जहां तक मैं बता सकता हूं, बस अपने अंतिम स्थिति से पृष्ठ का एक आभासी स्नैपशॉट लेता है, अर्थात, यह स्पष्ट रूप से बताई गई बातों को अनदेखा कर रहा है, और केवल यही नहीं, एक पृष्ठ लेना जो संग्रहीत नहीं किया जाना चाहिए। , और वास्तव में इसे फिर से जाँच किए बिना इसे संग्रहीत करना, जो सभी प्रकार के अजीब सत्र मुद्दों की ओर जाता है, अन्य बातों के अलावा।
मैं सिर्फ यह जोड़ रहा हूं कि कोई व्यक्ति साथ आता है और यह पता नहीं लगा सकता है कि उन्हें विशेष रूप से आईफ़ोन और आईपैड के साथ सत्र की त्रुटियां क्यों हो रही हैं, जो इस क्षेत्र के सबसे खराब अपराधी हैं।
मैंने इस मुद्दे के साथ काफी व्यापक डिबगर परीक्षण किया है, और यह मेरा निष्कर्ष है, डिवाइस इन निर्देशों को पूरी तरह से अनदेखा करते हैं।
यहां तक कि नियमित उपयोग में, मैंने पाया है कि कुछ मोबाइल भी पूरी तरह से नए संस्करणों के लिए कहने के लिए जाँच करने में विफल रहते हैं, समय सीमा समाप्त हो रही है: 0 तो अंतिम संशोधित तारीखों की जाँच करने के लिए कि क्या इसे नया मिलना चाहिए।
यह बस नहीं होता है, इसलिए मुझे जो करने के लिए मजबूर किया गया था, उसमें सीएसएस / जेएस फाइलों में क्वेरी स्ट्रिंग्स को जोड़ने के लिए मुझे अपडेट को मजबूर करने की आवश्यकता थी, जो बेवकूफ मोबाइल उपकरणों को यह सोचने में चकरा देता है कि यह एक फाइल नहीं है, जैसे: मेरी .css? v = 1, फिर v = 2 के लिए css / js अपडेट। यह काफी हद तक काम करता है।
उपयोगकर्ता के ब्राउज़र, वैसे भी, अगर उनकी चूक के लिए छोड़ दिया जाए, तो 2016 तक, जैसा कि मुझे लगातार पता चलता है (हम अपनी साइट पर बहुत सारे बदलाव और अपडेट करते हैं) भी ऐसी फ़ाइलों पर अंतिम संशोधित तारीखों की जांच करने में विफल रहते हैं, लेकिन क्वेरी स्ट्रिंग विधि उस समस्या को हल करता है। यह कुछ ऐसा है जो मैंने ग्राहकों और कार्यालय के लोगों के साथ देखा है, जो अपने ब्राउज़र पर बुनियादी सामान्य उपयोगकर्ता चूक का उपयोग करते हैं, और सीएसएस / जेएस आदि के साथ कैशिंग मुद्दों के बारे में कोई जागरूकता नहीं है, परिवर्तन पर नई सीएसएस / जेएस प्राप्त करने में लगभग असफल हैं। जिसका अर्थ है कि उनके ब्राउज़रों के लिए चूक, ज्यादातर MSIE / फ़ायरफ़ॉक्स वे नहीं कर रहे हैं जो उन्हें करने के लिए कहा जाता है, वे परिवर्तनों को अनदेखा करते हैं और अंतिम संशोधित तिथियों को अनदेखा करते हैं और यहां तक कि समाप्ति की पुष्टि नहीं करते हैं: 0 स्पष्ट रूप से सेट करें।
यह अच्छी तकनीकी जानकारी के साथ एक अच्छा धागा था, लेकिन यह भी ध्यान रखना महत्वपूर्ण है कि विशेष रूप से मोबाइल उपकरणों में इस सामान का समर्थन कितना बुरा है। हर कुछ महीनों में मुझे उनकी विफलता के खिलाफ सुरक्षा की अधिक परतों को जोड़ना होगा, जो उन्हें प्राप्त होने वाले हेडर आदेशों का पालन करने के लिए, या उन आदेशों को ठीक से समझने के लिए।
एक चीज जो (आश्चर्यजनक रूप से) उल्लेखित नहीं की गई है, वह यह है कि अनुरोध स्पष्ट रूप से यह संकेत दे सकता है कि यह max-stale
निर्देश का उपयोग करते हुए, बासी डेटा को स्वीकार करेगा । उस स्थिति में, यदि सर्वर ने जवाब दिया max-age=0
, तो कैश केवल प्रतिक्रिया बासी पर विचार करेगा, और ग्राहक के अनुरोध को संतुष्ट करने के लिए इसका उपयोग करने के लिए स्वतंत्र होगा [जो संभावित-बासी डेटा के लिए कहा था]। इसके विपरीत, अगर सर्वर भेजता है no-cache
कि वास्तव में ग्राहक द्वारा (के साथ max-stale
) बासी डेटा के लिए किसी भी अनुरोध को ट्रम्प करता है , क्योंकि कैश को पुनर्जीवित करना चाहिए।
अंतर यह है कि नो-कैश (फ़ायरफ़ॉक्स पर कोई स्टोर नहीं) किसी भी तरह के कैशिंग को रोकता है। डिस्क पर लिखी जा रही सुरक्षित सामग्री वाले पृष्ठों को रोकने के लिए यह उपयोगी हो सकता है और उन पृष्ठों के लिए जिन्हें हमेशा अपडेट किया जाना चाहिए, भले ही वे बैक बटन के साथ फिर से आए हों।
अधिकतम आयु = 0 इंगित करता है कि कैश प्रविष्टि बासी है और इसे पुन: सत्यापन की आवश्यकता है, लेकिन कैशिंग को नहीं रोकता है। अक्सर ब्राउज़र केवल एक बार ब्राउज़र सत्र के अनुसार संसाधनों को मान्य करते हैं, इसलिए सामग्री को तब तक अपडेट नहीं किया जा सकता है जब तक कि साइट नए सत्र में नहीं देखी जाती है।
आमतौर पर, ब्राउज़र तब तक समाप्त हो चुकी कैश प्रविष्टियों को नहीं हटाते हैं, जब तक कि वे ब्राउज़र कैश के पूर्ण होने पर नई सामग्री के लिए स्थान को पुनः प्राप्त नहीं कर रहे हैं। नो-स्टोर का उपयोग करते हुए, नो-कैश कैश प्रविष्टि को स्पष्ट रूप से हटाने की अनुमति देता है।
max-age=0
है कि यदि आपका मतलब है कि कैशिंग की अनुमति है, लेकिन संसाधन को अमान्य किया जाना चाहिए और no-store
यदि आप नहीं चाहते हैं कि प्रतिक्रिया कैश में संग्रहीत की जाए। no-cache
बेतरतीब ढंग से इन उपयोगकर्ता एजेंट विक्रेता और संस्करण संख्या और ट्रांसफर प्रोटोकॉल के आधार पर दोनों में से किसी मतलब करने के लिए नामित किया गया है।