37

कैश कंट्रोल हेडर "नो-कैश, अवश्य-पुनरीक्षित, निजी" ब्राउज़र को संसाधन को कैश करने की अनुमति देता है लेकिन सशर्त अनुरोधों के साथ पुनर्मूल्यांकन को मजबूर करता है। यह एफएफ, सफारी और क्रोम में अपेक्षित के रूप में काम करता है।आईई को संसाधनों को कैश करने के लिए बनाएं लेकिन हमेशा

हालांकि, आईई 7 + 8 एक सशर्त अनुरोध नहीं भेजता है, यानी, "अगर-संशोधित-चूंकि" अनुरोध शीर्षलेख में अनुपलब्ध है और इसलिए सर्वर HTTP/304 के बजाय HTTP/200 के साथ प्रतिक्रिया करता है।

यहाँ पूर्ण सर्वर प्रतिक्रिया हेडर हैं:

Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT 
Content-type: text/html;charset=utf-8 
Content-Length: 10835 
Date: Wed, 16 Feb 2011 13:52:26 GMT 
Connection: keep-alive 
Cache-Control: no-cache, must-revalidate, private 

यह एक IE बग की तरह लगता है, लेकिन मैं वेब पर संबंधित कुछ नहीं मिला है, तो मुझे आश्चर्य है कि क्या हो सकता है अभाव या किसी अन्य शीर्ष लेख के अस्तित्व आईई अजीब व्यवहार करता है?

कोई कैश और अधिकतम उम्र के बीच के अंतर का एक अच्छा चर्चा: What's the difference between Cache-Control: max-age=0 and no-cache?

+0

इंटरनेट विकल्प में जाएं ==> सामान्य टैब ==> ब्राउजिंग इतिहास अनुभाग ==> सेटिंग्स ... बटन। "संग्रहित पृष्ठों के नए संस्करणों की जांच करें:" चयनकर्ता को देखें। पुष्टि करें कि यह कैश व्यवहार इसकी सेटिंग से जुड़ा हुआ है या नहीं (अधिकांश उपयोगकर्ताओं के लिए, यह स्वचालित रूप से होना चाहिए)। – rskar

+1

यह ** ** इस व्यवहार से जुड़ा ** नहीं है। – alienhard

उत्तर

66

मैं अंत में यह समझ गए होंगे बाहर। यहां एक स्पष्टीकरण और परीक्षण समाधान है। http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

ऐसा नहीं है कि आईई नहीं स्थानीय स्तर पर 'कोई कैश' निर्देश के साथ दुकान पृष्ठों करता है और इसलिए हमेशा बिना शर्त अनुरोध भेजता है कहते हैं:

निम्नलिखित साइट मेरी अवलोकन पुष्टि करता है।

वहाँ भी एक एमएस समर्थन लेख है - https://support.microsoft.com/help/234067/ - जो इस बात की पुष्टि करता:

"इंटरनेट एक्सप्लोरर HTTP 1.1 कैश नियंत्रण हेडर, जो एक विशेष वेब संसाधन के सभी कैशिंग जब कोई कैश मूल्य निर्दिष्ट किया जाता है बचाता है का समर्थन करता है ... "

यह व्यवहार पूरी तरह से गलत नहीं है - लेकिन यह आरएफसी 2616 (सेकेंड 14.9.1) का इरादा नहीं है। 'नो-कैश' के बारे में यह कहता है "... एक कैश को मूल सर्वर के साथ सफल पुनर्मूल्यांकन के बिना बाद के अनुरोध को पूरा करने के लिए प्रतिक्रिया का उपयोग नहीं करना चाहिए।" तो प्रतिक्रिया कैश किया जा सकता है लेकिन इसे पुन: सत्यापित करना होगा। आईई को छोड़कर प्रमुख ब्राउज़र, प्रतिक्रिया को कैश करते हैं और इसे पुनः सक्रिय करते हैं। अनुरोध को संग्रहीत करने से रोकने के लिए, 'नो-स्टोर' कैश-कंट्रोल निर्देश है।

संक्षेप में, आईई 'नो-कैश' को 'नो-स्टोर' के रूप में मानता है।

और यहाँ एक सुसंगत तरीके से IE और अन्य ब्राउज़रों के लिए सशर्त अनुरोध सक्षम करने के लिए समाधान है:

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

ये महत्वपूर्ण शीर्ष लेख फ़ील्ड हैं:

Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT 
Expires: -1 
Cache-Control: must-revalidate, private 
  • Last-Modified (या ETag) एक सत्यापनकर्ता
  • समय-सीमा समाप्त -1 बताता है कि संसाधन बासी है और
  • दोबारा सत्यापित किया जाना चाहिए के रूप में की जरूरत है
  • कैश-नियंत्रण नहीं-कैश या कोई दुकान शामिल नहीं करना चाहिए
+1

इसे खोजने और साझा करने के लिए बहुत धन्यवाद! – rskar

+0

बढ़िया, यह वही है जो मैं ढूंढ रहा था! –

+2

IE11 चल रहा है (वर्चुअलबॉक्स में Win8.1 पर) मुझे वही व्यवहार नहीं मिलता है। मेरे लिए, IE11 उन्हें पूरी तरह से पुनः लोड करने के बजाय 'नो-कैश' के रूप में चिह्नित संसाधनों को मान्य करता है। संसाधनों की पुरानी तारीख के साथ 'समाप्ति' शीर्षलेख भी होता है। – henko

-2
$last_modified = filemtime($_SERVER['SCRIPT_FILENAME']); 

    session_cache_limiter(FALSE); 

    header("Content-Type: text/css"); 
    header("Cache-Control: max-age=1, must-revalidate, private"); 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s", $last_modified) . " GMT"); 

    if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) 
    { 
     if(strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) >= $last_modified) 
     { 
     header("HTTP/1.1 304 Not Modified"); 
     exit; 
     } 
    }