नो-कैश और मस्ट-रीलाइड के बीच अंतर


179

RFC 2616 से

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

कोई कैश

यदि नो-कैश निर्देश फ़ील्ड-नाम को निर्दिष्ट नहीं करता है, तो कैश को मूल सर्वर के साथ सफल पुन: सत्यापन के बिना बाद के अनुरोध को संतुष्ट करने के लिए प्रतिक्रिया का उपयोग नहीं करना चाहिए। यह एक मूल सर्वर को कैशे से भी कैशिंग को रोकने की अनुमति देता है जिसे क्लाइंट अनुरोधों के लिए बासी प्रतिक्रियाओं को वापस करने के लिए कॉन्फ़िगर किया गया है।

इसलिए यह एजेंटों को सभी प्रतिक्रियाओं को अमान्य करने का निर्देश देता है ।

इसकी तुलना में

आवश्यक पुनः सत्यापित

जब किसी कैश द्वारा प्राप्त प्रतिसाद में पुनर्जीवित निर्देश मौजूद होना चाहिए, तो कैश उस प्रविष्टि का उपयोग नहीं करता है जब वह मूल सर्वर के साथ इसे फिर से अमान्य किए बिना बाद के अनुरोध का जवाब देने के लिए बासी हो जाता है।

तो यह एजेंटों को पुनर्जीवित बासी प्रतिक्रियाओं को निर्देशित करता है ।

विशेष रूप से no-cache, इस संबंध में उपयोगकर्ता एजेंट वास्तव में इस निर्देश के साथ कैसा व्यवहार करते हैं?

no-cacheअगर वहाँ must-revalidateऔर क्या बात है max-age?

देखें यह टिप्पणी:

http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/

कोई कैश

हालांकि यह निर्देश जैसा लगता है कि यह ब्राउज़र को पृष्ठ को कैश नहीं करने का निर्देश दे रहा है, एक सूक्ष्म अंतर है। RFC के अनुसार, "नो-कैश" निर्देश, ब्राउज़र को बताता है कि उसे कैश से पेज को परोसने से पहले सर्वर से रिवाइज करना चाहिए। रिवैलिडेशन एक साफ-सुथरी तकनीक है जो एप्लिकेशन को बैंड-चौड़ाई का संरक्षण करने देती है। यदि पृष्ठ जिस ब्राउज़र पर कैश किया गया है वह नहीं बदला है, तो सर्वर ब्राउज़र को केवल संकेत देता है और पृष्ठ कैश से प्रदर्शित होता है। इसलिए, ब्राउज़र (सिद्धांत में, कम से कम), पृष्ठ को अपने कैश में संग्रहीत करता है, लेकिन सर्वर के साथ पुन: अमान्य होने के बाद ही इसे प्रदर्शित करता है। व्यवहार में, IE और फ़ायरफ़ॉक्स ने नो-कैश निर्देश का इलाज करना शुरू कर दिया है जैसे कि यह ब्राउज़र को पृष्ठ को कैश नहीं करने का निर्देश देता है। हमने लगभग एक साल पहले इस व्यवहार को देखना शुरू किया।

क्या किसी को इस पर अधिक आधिकारिक कुछ भी मिला है?

अपडेट करें

पुनर्निर्देशित निर्देश को सर्वर द्वारा उपयोग किया जाना चाहिए, यदि और केवल यदि प्रतिनिधित्व पर एक अनुरोध को मान्य करने में विफलता के परिणामस्वरूप गलत संचालन हो सकता है, जैसे कि चुपचाप अप्रकाशित वित्तीय लेनदेन।

यह कुछ ऐसा है जिसे मैंने अब तक दिल पर नहीं लिया है। RFC कह रहा है कि हल्के-से-अमान्य का उपयोग न करें। बात यह है कि, वेब सेवाओं के साथ, आपको एक नकारात्मक दृष्टिकोण अपनाना होगा और अपने अज्ञात ग्राहक ऐप्स के लिए सबसे बुरा मानना ​​होगा। किसी भी बासी संसाधन में समस्या पैदा करने की क्षमता होती है।

और कुछ और जो मैंने अभी माना है, लास्ट-मॉडिफाइड या ETags के बिना, ब्राउज़र केवल पूरे संसाधन को फिर से ला सकता है। हालांकि ईटैग्स के साथ, मैंने देखा है कि क्रोम कम से कम हर अनुरोध पर पुन: अमान्य लगता है। जो इन दोनों निर्देशों को गलत बनाता है या कम से कम खराब नाम रखता है क्योंकि वे तब तक ठीक से अमान्य नहीं कर सकते हैं जब तक कि अनुरोध में अन्य हेडर शामिल नहीं होते हैं जो तब भी 'हमेशा अमान्य' होते हैं।

मैं केवल उस अंतिम बिंदु को स्पष्ट करना चाहता हूं। बस सेटिंग करके must-revalidateलेकिन या तो ईटैग या लास्ट-मोडिफाइड को शामिल नहीं किया जाता है, एजेंट केवल सामग्री फिर से प्राप्त कर सकता है क्योंकि इसमें सर्वर को तुलना करने के लिए भेजने के लिए कुछ भी नहीं है।

हालांकि, मेरे अनुभवजन्य परीक्षण से पता चला है कि जब ETag या संशोधित हेडर डेटा प्रतिक्रियाओं में शामिल होते हैं, तो एजेंट must-revalidateहेडर की उपस्थिति की परवाह किए बिना, वैसे भी हमेशा अमान्य होते हैं ।

तो इसका मतलब must-revalidateयह है कि जब यह बासी हो जाता है, तो 'बाईपास कैश' के लिए बाध्य करना, जो केवल तब हो सकता है जब आपने जीवनकाल / आयु must-revalidateनिर्धारित की हो , इस प्रकार यदि कोई आयु या अन्य हेडर के साथ प्रतिक्रिया पर सेट किया जाता है, तो यह प्रभावी रूप से no-cacheतब से इसके बराबर हो जाता है प्रतिक्रिया को तुरंत बासी माना जाएगा।

- तो मैं अंत में गिल्ली के जवाब को चिह्नित करने जा रहा हूं!


इसलिए सिद्धांत रूप में अंतर मान्य-हमेशा बनाम वैध-अगर-बासी है , जबकि व्यवहार में नो-कैश कुछ ब्राउज़रों द्वारा व्यवहार किया जाता है क्योंकि आपके द्वारा उद्धृत टिप्पणी को कभी भी मान्य नहीं कहा जाता है ... इसलिए आपको अपनी पसंद का उपयोग करना चाहिए। आप वास्तव में अभ्यास में क्या हासिल करना चाहते हैं, यह कैशिंग व्यवहार के आधार पर ...
CBroe

कृपया greenbytes.de/tech/webdav/… पढ़ें और देखें कि क्या यह आपके लिए चीजें स्पष्ट करता है।
जूलियन रेसके


जवाब के लिए यह निर्णय पेड़ जाँच stackoverflow.com/a/49925190/3748498
pravdomil

जवाबों:


191

मेरा मानना ​​है कि must-revalidateइसका मतलब है:

एक बार जब कैश समाप्त हो जाता है, तो उपयोगकर्ता को बासी प्रतिक्रियाओं को वापस करने से मना करें, भले ही वे कहते हैं कि बासी प्रतिक्रियाएं स्वीकार्य हैं।

जबकि no-cacheइसका तात्पर्य है:

must-revalidate तथ्य यह है कि प्रतिक्रिया तुरंत बासी हो जाती है।

यदि एक प्रतिक्रिया 10 सेकंड के लिए उपलब्ध है, तो must-revalidate10 सेकंड के बाद में किक करता है, जबकि 0 सेकंड के बाद no-cacheनिकलता है must-revalidate

कम से कम, यह मेरी व्याख्या है।


2
मैं इसे अभी कैसे देख रहा हूं। दिलचस्प हिस्सा मेरा आखिरी पैरा है, बिना ETag या लास्ट-मॉडिफाइड के, एजेंट के पास यह बताने के लिए उपयोग करने के लिए कुछ भी नहीं है कि उसके पास कैश में क्या है और उसे पूरे पेलोड को फिर से डाउनलोड करना होगा। इसलिए जब RFC "रिवाइडलेट" कहता है, जिसका अर्थ है कि शायद, फिर से लाना।
ल्यूक पुप्लेट

44
जिसका अर्थ भी है max-age=0, must-revalidateऔर no-cacheसमान हैं
अंशुल

5
@ अंशुल, पहले मुझे लगा कि आप सही हैं कि 'अधिकतम-आयु = 0, अवश्य-पुन: अमान्य और नो-कैश समान हैं', लेकिन जेफरी फॉक्स का जवाब देखें जो इंगित करता है कि यह बिल्कुल सही नहीं है।
डॉन हैच

2
@Anshul नहीं, must-revalidateऔर no-cacheताज़ा प्रतिक्रियाओं के लिए अलग-अलग अर्थ हैं: यदि एक कैश्ड प्रतिक्रिया ताज़ा है (यानी, प्रतिक्रिया समाप्त नहीं हुई है), must-revalidateप्रॉक्सी को सर्वर से पुन: अमान्य किए बिना इसे तुरंत सेवा प्रदान करेगा, जबकि no-cacheप्रॉक्सी के साथ पुन: अमान्य होना चाहिए ताजगी की परवाह किए बिना प्रतिक्रिया व्यक्त की। स्रोत: "HTTP - द डेफिनिटिव गाइड", पेज 182-183।
मथायस ब्रौन

8
@ मथायसब्राँ आह, मैं भ्रम का स्रोत देख सकता हूँ। हो सकता है कि मुझे लिखा जाना चाहिए no-cacheऔर max-age=0, must-revalidateसमान हैं
अंशुल

24

max-age=0, must-revalidateऔर no-cacheबिल्कुल समान नहीं हैं। साथ must-revalidate, अगर सर्वर एक पुनर्वैधीकरण अनुरोध का जवाब नहीं है, ब्राउज़र / प्रॉक्सी एक 504 त्रुटि वापस जाने के लिए माना जाता है। इसके साथ no-cache, यह केवल कैश्ड सामग्री दिखाएगा, जो संभवतः उपयोगकर्ता द्वारा पसंद किया जाएगा (कुछ भी नहीं की तुलना में कुछ बासी होना बेहतर है)। यही कारण है कि must-revalidateकेवल महत्वपूर्ण लेनदेन के लिए इरादा है।


10
अपनी no-cacheव्याख्या के बारे में निश्चित नहीं । से आरएफसी 7234 "नहीं-कैश" प्रतिक्रिया निर्देश इंगित करता है कि प्रतिक्रिया नहीं मूल सर्वर पर सफल सत्यापन के बिना बाद में एक अनुरोध को पूरा करने के लिए इस्तेमाल किया जाना चाहिए। यह एक मूल सर्वर को कैश को रोकने के लिए इसे बिना संपर्क के अनुरोध को संतुष्ट करने के लिए उपयोग करने से रोकता है, यहां तक ​​कि उन कैश द्वारा भी जो बासी प्रतिक्रियाओं को भेजने के लिए कॉन्फ़िगर किया गया है। यह प्रतिबंध के लिए समान लगता हैmust-revalidate
अंशुल

9
क्या जेफरी के पास इस बात के सबूत हैं कि क्रियान्वयन कैसे व्यवहार करता है?
ऑरेंजडॉग

मुझे लगता है कि यह उत्तर प्रॉक्सी / एलबी सर्वरों के लिए सही है। लेकिन वास्तव में, ब्राउज़र उस मामले में 504 नहीं लौटाते हैं।
यन दोनंदल २१'१ann को ì

तो must-validateइसका मतलब हैmust-refresh
शमौन_वेर

15

के बारे में जेफरी फॉक्स की व्याख्या के साथ no-cache, मैंने क्रोम 52.0.2743.116 मीटर के तहत परीक्षण किया है, परिणाम से पता चलता है कि no-cacheएक ही व्यवहार है must-revalidate, वे सभी सर्वर का उपयोग नहीं होने पर स्थानीय कैश का उपयोग नहीं करेंगे , और, वे सभी का उपयोग करेंगे, जबकि टैप ब्राउज़र बैक / आगे बटन जब सर्वर पहुंच से बाहर है। जैसा कि ऊपर, मुझे लगता max-age=0, must-revalidateहै कि no-cacheकम से कम कार्यान्वयन में समान है ।


जब सर्वर पुनर्जीवित करने के लिए उपलब्ध होगा तो क्या क्रोम स्थानीय कैश का उपयोग करेगा? (यानी "अगर-संशोधित-चूंकि")। दोनों मामलों में?
रिच

-2

मुझे लगता है कि वहाँ के बीच एक अंतर है max-age=0, must-revalidateऔर no-cache:

में must-revalidateमामला ग्राहक एक भेज सकता है, If-Modified-Sinceअनुरोध और अगर कैश से प्रतिक्रिया की सेवा 304 Not Modifiedलौटाया जाता है।

में no-cacheमामला है, ग्राहक प्रतिक्रिया कैश नहीं करना होगा, ताकि उपयोग नहीं करना चाहिए If-Modified-Since


6
लेकिन no-cacheइसका मतलब यह नहीं है no-store- no-cacheग्राहक में संसाधन अभी भी कैश किया जा सकता है; इसका उपयोग किए जाने से पहले इसे फिर से सत्यापित किया जाना चाहिए?
एरन

4
आप conflating कर रहे हैं no-cacheऔर no-storeno-cacheसंसाधन किया जाना चाहिए मतलब है दोबारा सत्यापितRevalidate में सशर्त अनुरोधों का उपयोग करने का विकल्प शामिल है, जैसे If-None-Matchऔर If-Modified-Since
जूल्स सैम। Randolph

1
@JulesRandolph: आप सही हो सकते हैं। क्या आपके पास कोई परीक्षण / डेमो है? इस q पर सभी विरोधी साक्ष्य-मुक्त दावे निराशाजनक हैं। यहां तक ​​कि स्वीकृत उत्तर भी यही कहता है "कम से कम, यह मेरी व्याख्या है"। अगर मुझे कुछ समय मिलता है तो मैं एक परीक्षण बिस्तर स्थापित कर सकता हूं और इसे यहां पोस्ट कर सकता हूं।
रिच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.