2012-04-25 22 views
113

मैं Wikipedia पर के बारे में Pragma हैडर पढ़ कहते हैं जो:प्रगामा और कैश-कंट्रोल हेडर के बीच अंतर?

"Pragma: कोई कैश हेडर फ़ील्ड एक HTTP/1.0 हैडर अनुरोधों में उपयोग के लिए है यह करने के लिए ब्राउज़र के लिए एक साधन है। सर्वर और किसी भी मध्यवर्ती कैश को बताएं कि यह संसाधन का एक नया संस्करण चाहता है, सर्वर के लिए संसाधन को कैश न करने के लिए ब्राउज़र को बताने के लिए नहीं। कुछ उपयोगकर्ता एजेंट प्रतिक्रियाओं में इस शीर्षलेख पर ध्यान देते हैं, लेकिन HTTP/1.1 आरएफसी विशेष रूप से इस व्यवहार पर भरोसा करने के खिलाफ चेतावनी देता है। "

लेकिन मैं समझ नहीं किया है कि वह क्या करता? Cache-Control शीर्षलेख के बीच क्या अंतर है जिसका मूल्य no-cache और Pragma है जिसका मूल्य भी no-cache है?

उत्तर

132

Pragma HTTP/1.0 कार्यान्वयन और cache-control एक ही अवधारणा का HTTP/1.1 कार्यान्वयन है। वे दोनों क्लाइंट को प्रतिक्रिया कैश करने से रोकने के लिए हैं। पुराने ग्राहक HTTP/1.1 का समर्थन नहीं कर सकते हैं, यही कारण है कि हेडर अभी भी उपयोग में है।

+22

हालांकि नीचे सीएनटी का उत्तर अधिक जटिल है, यह विनिर्देश के अनुसार भी अधिक सही है। 'प्रगमा: नो-कैश' का उपयोग केवल अनुरोधों में किया जाना है (जिसका अर्थ है "मैं मूल चाहता हूं, कैश की गई प्रति नहीं") और इसका व्यवहार प्रतिक्रियाओं के लिए निर्दिष्ट नहीं है। – clime

+4

'कैश-कंट्रोल: नो-कैश' के अनुरोधों के लिए समान अर्थ है लेकिन वास्तव में प्रतिक्रियाओं के लिए भी परिभाषित किया गया है, जिसका अर्थ है "यदि आप भविष्य में इसकी कैश की गई प्रति का उपयोग करना चाहते हैं, तो आपको पहले यह जांचना होगा कि यह ऊपर है- आज तक (यानी पुनर्मूल्यांकन करें) "। – clime

+1

यह कैश कंट्रोल के लिए है, इसे केवल कैश-रोकथाम के लिए ही नहीं होना चाहिए, इसका उपयोग यह भी कहने के लिए किया जा सकता है कि "आप इसे कैश कर सकते हैं।" .... –

75

Pragma को छोड़कर कोई अंतर नहीं है, सिवाय इसके कि क्लाइंट द्वारा अनुरोधों के लिए लागू किया गया है, जबकि Cache-Control क्लाइंट के अनुरोधों और सर्वर के उत्तरों दोनों द्वारा उपयोग किया जा सकता है।

तो, जहां तक ​​मानक जाते हैं, वे केवल क्लाइंट के अनुरोध से ग्राहक से अनुरोध प्राप्त कर सकते हैं और सर्वर से अनुरोध प्राप्त करने वाले सर्वर से तुलना की जा सकती है। http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 इस प्रकार परिदृश्य को परिभाषित करता है:

HTTP/1.1 कैश चाहिए इलाज "Pragma: नहीं-कैश" के रूप में अगर ग्राहक था भेजा "कैश-नियंत्रण: नहीं कैश"। HTTP में परिभाषित कोई नया प्रगमा निर्देश होगा।

Note: because the meaning of "Pragma: no-cache as a response 
    header field is not actually specified, it does not provide a 
    reliable replacement for "Cache-Control: no-cache" in a response 

तरह से मैंने पढ़ा था जिसके ऊपर:

  • यदि आप एक ग्राहक के लेखन और कर रहे हैं की जरूरत है no-cache:

    • सिर्फ अपने अनुरोध में Pragma: no-cache उपयोग करते हैं, आप के बाद से पता नहीं हो सकता है कि Cache-Control सर्वर द्वारा समर्थित है;
    • लेकिन उत्तर में, चाहे कैश करने के लिए पर फैसला करने के लिए, के लिए Cache-Control
  • देखें कि क्या आप एक सर्वर लिख रहे हैं:

      ग्राहकों से पार्स अनुरोधों में
    • , Cache-Control के लिए जाँच; यदि नहीं मिला, तो Pragma: no-cache देखें, और Cache-Control: no-cache तर्क निष्पादित करें;
    • उत्तर में, Cache-Control प्रदान करें।
बेशक

, वास्तविकता क्या लिखा या आरएफसी में निहित है से अलग हो सकता है!

+4

क्या हैडर में दोनों हैं? कैश-कंट्रोल: अधिकतम आयु = 86400' और 'प्रज्ञा: नो-कैश'? फिर आधुनिक ब्राउज़र द्वारा किसको सम्मानित किया जाएगा? – PKHunter

+2

@PKHunter, व्यवहार क्यों अपरिभाषित होने पर आप किस तरह से देखभाल करेंगे? यदि आप सर्वर के लिए ज़िम्मेदार हैं, तो स्पष्ट रूप से आप ग्राहक को भ्रामक जानकारी देने से बेहतर कर सकते हैं। साथ ही, जैसा कि मेरे उत्तर में इंगित किया गया है, 'प्रगमा: नो-कैश' केवल ब्राउज़र से अनुरोधों के लिए परिभाषित किया गया है, और यह सर्वर से ब्राउज़र में उत्तरों में पूरी तरह अमान्य और अपरिभाषित होगा, उदाहरण के लिए, मैं कल्पना करता हूं कि प्रत्येक ब्राउज़र (चाहे आधुनिक या नहीं) किसी भी उत्तर में ऐसे हेडर को अनदेखा कर लेना चाहिए। – cnst

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