http - सभी ब्राउज़रों में वेब पेज कैशिंग को कैसे नियंत्रित करें?




caching https (18)

परिचय

सभी निर्दिष्ट ग्राहकों (और प्रॉक्सी) में काम करने वाले शीर्षकों का सही न्यूनतम सेट:

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0

Cache-Control क्लाइंट और प्रॉक्सी के लिए HTTP 1.1 spec प्रति है (और Expires बगल में कुछ ग्राहकों द्वारा निहित रूप से आवश्यक)। Pragma प्रागैतिहासिक ग्राहकों के लिए HTTP 1.0 spec प्रति है। Expires HTTP 1.0 और 1.1 spec प्रति क्लाइंट और प्रॉक्सी के लिए है। HTTP 1.1 में, Cache-Control को Expires पर प्राथमिकता होती है, इसलिए यह केवल HTTP 1.0 प्रॉक्सी के लिए ही है।

यदि आपको केवल 6 no-store साथ HTTPS पर पृष्ठों की सेवा करते समय आईई 6 और इसकी टूटी हुई कैशिंग की परवाह नहीं है, तो आप Cache-Control: no-cache छोड़ सकते हैं।

Cache-Control: no-store, must-revalidate
Pragma: no-cache
Expires: 0

यदि आपको आईई 6 और न ही HTTP 1.0 क्लाइंट्स (HTTP 1.1 को 1 99 7 में पेश किया गया था) की परवाह नहीं है, तो आप Pragma को छोड़ सकते हैं।

Cache-Control: no-store, must-revalidate
Expires: 0

यदि आपको HTTP 1.0 प्रॉक्सी के बारे में परवाह नहीं है, तो आप Expires हो सकते हैं।

Cache-Control: no-store, must-revalidate

दूसरी तरफ, यदि सर्वर में एक वैध Date शीर्षलेख शामिल होता है, तो आप सैद्धांतिक रूप से Cache-Control भी छोड़ सकते हैं और केवल Expires पर भरोसा कर सकते हैं।

Date: Wed, 24 Aug 2016 18:32:02 GMT
Expires: 0

लेकिन यह असफल हो सकता है अगर उदाहरण के लिए एंडुसर ऑपरेटिंग सिस्टम की तारीख में हेरफेर करता है और क्लाइंट सॉफ़्टवेयर उस पर भरोसा कर रहा है।

उपरोक्त Cache-Control पैरामीटर निर्दिष्ट किए जाने पर अन्य Cache-Control पैरामीटर जैसे max-age अप्रासंगिक हैं। यहां तक ​​कि अधिकांश अन्य उत्तरों में शामिल Last-Modified शीर्षलेख केवल तभी दिलचस्प है जब आप वास्तव में अनुरोध को कैश करना चाहते हैं, इसलिए आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है।

इसे कैसे सेट करें?

PHP का उपयोग करना:

header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.

जावा सर्वलेट, या Node.js का उपयोग करना:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.

एएसपी.नेट-एमवीसी का उपयोग करना

Response.Cache.SetCacheability(HttpCacheability.NoCache);  // HTTP 1.1.
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

एएसपी.नेट का उपयोग करना:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

एएसपी का उपयोग करना:

Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate" ' HTTP 1.1.
Response.addHeader "Pragma", "no-cache" ' HTTP 1.0.
Response.addHeader "Expires", "0" ' Proxies.

रेल, या पायथन / फ्लास्क पर रूबी का उपयोग करना:

response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1.
response.headers["Pragma"] = "no-cache" # HTTP 1.0.
response.headers["Expires"] = "0" # Proxies.

पायथन / Django का उपयोग करना:

response["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1.
response["Pragma"] = "no-cache" # HTTP 1.0.
response["Expires"] = "0" # Proxies.

पायथन / पिरामिड का उपयोग करना:

request.response.headerlist.extend(
    (
        ('Cache-Control', 'no-cache, no-store, must-revalidate'),
        ('Pragma', 'no-cache'),
        ('Expires', '0')
    )
)

Google Go का उपयोग करना:

responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1.
responseWriter.Header().Set("Pragma", "no-cache") // HTTP 1.0.
responseWriter.Header().Set("Expires", "0") // Proxies.

Apache .htaccess फ़ाइल का उपयोग करना:

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

HTML4 का उपयोग करना:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

एचटीएमएल मेटा टैग बनाम HTTP प्रतिक्रिया शीर्षलेख

जानना महत्वपूर्ण है कि जब एक HTTP पृष्ठ पर एक HTML पृष्ठ परोसा जाता है, और एक हेडर HTTP प्रतिक्रिया शीर्षलेख और HTML <meta http-equiv> टैग दोनों में मौजूद होता है, तो HTTP प्रतिक्रिया शीर्षलेख में निर्दिष्ट एक को प्राथमिकता प्राप्त होगी एचटीएमएल मेटा टैग पर। HTML मेटा टैग का उपयोग तभी किया जाएगा जब पेज को स्थानीय डिस्क फ़ाइल सिस्टम से file:// URL के माध्यम से देखा जा सके। W3 HTML spec अध्याय 5.2.2 भी देखें। जब आप उन्हें प्रोग्रामेटिक रूप से निर्दिष्ट नहीं करते हैं तो इसका ख्याल रखें, क्योंकि वेबसर्वर कुछ डिफ़ॉल्ट मानों को शामिल कर सकता है।

आम तौर पर, आप स्टार्टर्स द्वारा भ्रम से बचने के लिए एचटीएमएल मेटा टैग निर्दिष्ट नहीं करेंगे , और हार्ड HTTP प्रतिक्रिया शीर्षकों पर भरोसा करेंगे। इसके अलावा, विशेष रूप से उन <meta http-equiv> टैग HTML5 में अमान्य हैं। एचटीएमएल 5 विनिर्देशों में सूचीबद्ध केवल http-equiv मानों की अनुमति है।

वास्तविक HTTP प्रतिक्रिया शीर्षलेख की पुष्टि

एक और दूसरे को सत्यापित करने के लिए, आप वेबब्रोसर के डेवलपर टूलसेट के HTTP ट्रैफ़िक मॉनीटर में उन्हें देख / डिबग कर सकते हैं। आप Chrome / Firefox23 + / IE9 + में F12 दबाकर और फिर "नेटवर्क" या "नेट" टैब पैनल खोलकर और फिर HTTP अनुरोध और प्रतिक्रिया के बारे में सभी विवरणों को उजागर करने के लिए ब्याज के HTTP अनुरोध पर क्लिक करके वहां जा सकते हैं। नीचे स्क्रीनशॉट क्रोम से है:

मैं उन शीर्षकों को फ़ाइल डाउनलोड पर भी सेट करना चाहता हूं

सबसे पहले, यह प्रश्न और उत्तर "वेब पेज" (एचटीएमएल पेज) पर लक्षित है, न कि "फ़ाइल डाउनलोड" (पीडीएफ, ज़िप, एक्सेल, आदि)। आप उन्हें बेहतर तरीके से कैश कर सकते हैं और यूआरआई पथ या क्वेरीस्ट्रिंग में कहीं भी कुछ फ़ाइल संस्करण पहचानकर्ता का उपयोग किसी बदले गए फ़ाइल पर पुनः लोड करने के लिए मजबूर कर सकते हैं। किसी भी तरह से फ़ाइल डाउनलोड पर उन नो-कैश हेडर को लागू करते समय, HTTP के बजाय HTTPS पर फ़ाइल डाउनलोड करने पर IE7 / 8 बग से सावधान रहें। विस्तार के लिए, देखें कि आईई foo.jsf डाउनलोड नहीं कर सकता है। आईई इस इंटरनेट साइट को खोलने में सक्षम नहीं था। अनुरोधित साइट या तो अनुपलब्ध है या नहीं मिल सकती है ।

हमारी जांच ने हमें दिखाया है कि सभी ब्राउज़र एक समान तरीके से http कैश निर्देशों का सम्मान नहीं करते हैं।

सुरक्षा कारणों से हम नहीं चाहते हैं कि हमारे ब्राउज़र में कुछ पेज वेब ब्राउज़र द्वारा कैश किए जाएं। यह कम से कम निम्न ब्राउज़रों के लिए काम करना चाहिए:

  • इंटरनेट एक्सप्लोरर 6+
  • फ़ायरफ़ॉक्स 1.5+
  • सफारी 3+
  • ओपेरा 9 +
  • क्रोम

हमारी आवश्यकता सुरक्षा परीक्षण से आई थी। हमारी वेबसाइट से लॉग आउट करने के बाद आप बैक बटन दबा सकते हैं और कैश किए गए पेज देख सकते हैं।


(हे, हर कोई: कृपया उन सभी शीर्षकों को कॉपी और पेस्ट न करें जिन्हें आप पा सकते हैं)

सबसे पहले, बैक बटन इतिहास कैश नहीं है :

ताजगी मॉडल (धारा 4.2) जरूरी नहीं है कि इतिहास तंत्र पर लागू हो। यही है, एक इतिहास तंत्र पिछले प्रस्तुति को प्रदर्शित कर सकता है भले ही यह समाप्त हो गया हो।

पुराने HTTP spec में शब्द भी मजबूत था, स्पष्ट रूप से ब्राउज़र को बैक बटन इतिहास के लिए कैश निर्देशों की उपेक्षा करने के लिए कह रहा था।

वापस समय पर वापस जाना चाहिए (उस समय जब उपयोगकर्ता लॉग इन था)। यह पहले खोले गए यूआरएल पर अग्रेषित नहीं करता है।

हालांकि, व्यावहारिक रूप से, कैश बैक बटन को बहुत विशिष्ट परिस्थितियों में प्रभावित कर सकता है:

  • पृष्ठ HTTPS पर वितरित किया जाना चाहिए, अन्यथा यह कैश-बस्टिंग विश्वसनीय नहीं होगा। इसके अलावा, यदि आप HTTPS का उपयोग नहीं कर रहे हैं, तो आपका पृष्ठ कई अन्य तरीकों से चोरी करने के लिए कमजोर है।
  • आपको Cache-Control: no-store, must-revalidate भेजना होगा Cache-Control: no-store, must-revalidate (कुछ ब्राउज़र no-store का निरीक्षण करते हैं और कुछ निरीक्षण must-revalidate )

आपको कभी भी इनमें से किसी की आवश्यकता नहीं है:

  • <meta> कैश हेडर के साथ - यह बिल्कुल काम नहीं करता है। पूरी तरह से बेकार।
  • post-check / pre-check - यह आईई-केवल निर्देश है जो केवल कैच करने योग्य संसाधनों पर लागू होता है।
  • दो बार या दर्जन भागों में समान हेडर भेजना। वहां कुछ PHP स्निपेट वास्तव में पिछले शीर्षकों को प्रतिस्थापित करते हैं, जिसके परिणामस्वरूप केवल अंतिम भेजा जा रहा है।

यदि आप चाहते हैं, तो आप जोड़ सकते हैं:

  • no-cache या max-age=0 , जो संसाधन (यूआरएल) "बाँध" बनायेगा और ब्राउज़र के लिए सर्वर की जांच करने की आवश्यकता होगी यदि कोई नया संस्करण है ( no-store पहले से ही यह भी मजबूत है)।
  • HTTP / 1.0 क्लाइंट्स के लिए अतीत में किसी दिनांक के साथ Expires जाता है (हालांकि वास्तविक HTTP / 1.0-only क्लाइंट इन दिनों पूरी तरह मौजूद नहीं हैं)।

बोनस: नया HTTP कैशिंग आरएफसी


अस्वीकरण: मैं दृढ़ता से @ बलुस के जवाब पढ़ने का सुझाव देता हूं। निम्नलिखित कैशिंग ट्यूटोरियल पढ़ने के बाद: http://www.mnot.net/cache_docs/ (मुझे सलाह है कि आप इसे भी पढ़ लें), मुझे विश्वास है कि यह सही होगा। हालांकि, ऐतिहासिक कारणों से (और क्योंकि मैंने इसे स्वयं परीक्षण किया है), मैं नीचे अपना मूल उत्तर शामिल करूंगा:

मैंने PHP के लिए 'स्वीकृत' उत्तर देने का प्रयास किया, जो मेरे लिए काम नहीं करता था। तब मैंने थोड़ा सा शोध किया, थोड़ा सा संस्करण पाया, इसका परीक्षण किया, और यह काम किया। यह रहा:

header('Cache-Control: no-store, private, no-cache, must-revalidate');     // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false);  // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');                  // Date in the past  
header('Expires: 0', false); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header ('Pragma: no-cache');

यह काम करना चाहिए। समस्या यह थी कि शीर्षलेख के समान भाग को दो बार सेट करते समय, यदि हेडर फ़ंक्शन के दूसरे तर्क के रूप में false नहीं भेजा जाता है, तो हेडर फ़ंक्शन बस पिछले header() कॉल को ओवरराइट करेगा। इसलिए, Cache-Control सेट करते समय, उदाहरण के लिए यदि कोई एक header() फ़ंक्शन कॉल में सभी तर्क डालना नहीं चाहता है, तो उसे ऐसा कुछ करना होगा:

header('Cache-Control: this');
header('Cache-Control: and, this', false);

here अधिक पूर्ण दस्तावेज देखें।


आईई 6 में एक बग है

"कंट्रोल-एन्कोडिंग: gzip" के साथ सामग्री हमेशा कैश की जाती है भले ही आप "कैश-कंट्रोल: नो-कैश" का उपयोग करें।

http://support.microsoft.com/kb/321722

आप IE6 उपयोगकर्ताओं के लिए gzip संपीड़न अक्षम कर सकते हैं ("MSIE 6" के लिए उपयोगकर्ता एजेंट की जांच करें)


कुछ शोध के बाद हम शीर्षलेखों की निम्नलिखित सूची के साथ आए जो अधिकांश ब्राउज़रों को कवर करना प्रतीत होता था:

एएसपी.नेट में हमने निम्नलिखित स्निपेट का उपयोग करके इन्हें जोड़ा:

Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0 

से मिला: http://forums.asp.net/t/1013531.aspx


जैसा कि पोर्नेल ने कहा है, आप जो चाहते हैं वह कैश को निष्क्रिय नहीं करना है, लेकिन इतिहास बफर को निष्क्रिय करना है। इतिहास बफर को अक्षम करने के लिए अलग-अलग ब्राउज़रों के अपने स्वयं के सूक्ष्म तरीके होते हैं।

क्रोम में (v28.0.1500.95 मीटर) हम इसे केवल Cache-Control: no-store द्वारा कर सकते हैं Cache-Control: no-store

फ़ायरफ़ॉक्स में (v23.0.1) इनमें से कोई भी काम करेगा:

  1. Cache-Control: no-store

  2. Cache-Control: no-cache (केवल https)

  3. Pragma: no-cache (केवल https)

  4. Vary: * (केवल https)

ओपेरा में (v12.15) हम केवल इसे Cache-Control: must-revalidate द्वारा कर सकते हैं Cache-Control: must-revalidate (केवल https)।

सफारी में (v5.1.7, 7534.57.2) इनमें से कोई भी काम करेगा:

  1. Cache-Control: no-store
    <body onunload=""> html में

  2. Cache-Control: no-store (केवल https)

आईई 8 (v8.0.6001.18702IC) में इनमें से कोई भी काम करेगा:

  1. Cache-Control: must-revalidate, max-age=0

  2. Cache-Control: no-cache

  3. Cache-Control: no-store

  4. Cache-Control: must-revalidate
    Expires: 0

  5. Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT

  6. Pragma: no-cache (केवल https)

  7. Vary: * (केवल https)

उपर्युक्त संयोजन हमें यह समाधान देता है जो क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7, और ओपेरा 12.15 के लिए काम करता है: Cache-Control: no-store, must-revalidate (केवल https)

ध्यान दें कि https की आवश्यकता है क्योंकि ओपेरा सादे http पृष्ठों के लिए इतिहास बफर को निष्क्रिय नहीं करेगा। यदि आप वास्तव में https प्राप्त नहीं कर सकते हैं और आप ओपेरा को अनदेखा करने के लिए तैयार हैं, तो आप यह कर सकते हैं कि यह सबसे अच्छा है:

Cache-Control: no-store
<body onunload="">

नीचे मेरे परीक्षणों के कच्चे लॉग दिखाता है:

एचटीटीपी:

  1. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7

  2. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7

  3. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    विफल: सफारी 5.1.7, ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8

  4. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    विफल: सफारी 5.1.7, ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8

  5. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  6. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  7. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  8. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  9. Cache-Control: no-store
    विफल: सफारी 5.1.7, ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8

  10. Cache-Control: no-store
    <body onunload="">
    विफल: ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7

  11. Cache-Control: no-cache
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  12. Vary: *
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7, ओपेरा 12.15
    सफलता: कोई नहीं

  13. Pragma: no-cache
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7, ओपेरा 12.15
    सफलता: कोई नहीं

  14. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  15. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  16. Cache-Control: must-revalidate, max-age=0
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  17. Cache-Control: must-revalidate
    Expires: 0
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  18. Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7, ओपेरा 12.15
    सफलता: आईई 8

  19. Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7, ओपेरा 12.15
    सफलता: कोई नहीं

HTTPS:

  1. Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7, ओपेरा 12.15
    सफलता: कोई नहीं

  2. Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7, ओपेरा 12.15
    सफलता: कोई नहीं

  3. Vary: *
    विफल: क्रोम 28, सफारी 5.1.7, ओपेरा 12.15
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8

  4. Pragma: no-cache
    विफल: क्रोम 28, सफारी 5.1.7, ओपेरा 12.15
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8

  5. Cache-Control: no-cache
    विफल: क्रोम 28, सफारी 5.1.7, ओपेरा 12.15
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8

  6. Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    विफल: क्रोम 28, सफारी 5.1.7, ओपेरा 12.15
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8

  7. Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    विफल: क्रोम 28, सफारी 5.1.7, ओपेरा 12.15
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8

  8. Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    विफल: क्रोम 28, सफारी 5.1.7, ओपेरा 12.15
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8

  9. Cache-Control: must-revalidate
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7
    सफलता: ओपेरा 12.15

  10. Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7
    सफलता: ओपेरा 12.15

  11. Cache-Control: must-revalidate, max-age=0
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7
    सफलता: आईई 8, ओपेरा 12.15

  12. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, सफारी 5.1.7
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8, ओपेरा 12.15

  13. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: क्रोम 28, सफारी 5.1.7
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8, ओपेरा 12.15

  14. Cache-Control: no-store
    विफल: ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7

  15. Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7

  16. Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    विफल: ओपेरा 12.15
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7

  17. Cache-Control: private, no-cache
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    विफल: क्रोम 28, सफारी 5.1.7, ओपेरा 12.15
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8

  18. Cache-Control: must-revalidate
    Expires: 0
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7,
    सफलता: आईई 8, ओपेरा 12.15

  19. Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7,
    सफलता: आईई 8, ओपेरा 12.15

  20. Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7,
    सफलता: आईई 8, ओपेरा 12.15

  21. Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    विफल: क्रोम 28, फ़ायरफ़ॉक्स 23, सफारी 5.1.7,
    सफलता: आईई 8, ओपेरा 12.15

  22. Cache-Control: private, must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    विफल: क्रोम 28, सफारी 5.1.7
    सफलता: फ़ायरफ़ॉक्स 23, आईई 8, ओपेरा 12.15

  23. Cache-Control: no-store, must-revalidate
    विफल: कोई नहीं
    सफलता: क्रोम 28, फ़ायरफ़ॉक्स 23, आईई 8, सफारी 5.1.7, ओपेरा 12.15


प्रतिक्रिया में प्रगति शीर्षलेख का उपयोग एक पत्नियों की कहानी है। आरएफसी 2616 केवल इसे अनुरोध हेडर के रूप में परिभाषित करता है

http://www.mnot.net/cache_docs/#PRAGMA


बैलससी द्वारा प्रदान किए गए उत्तर में शीर्षलेख ब्राउज़र के बैक बटन का उपयोग करते समय ब्राउज़र कैश से सामग्री प्रदर्शित करने से सफारी 5 (और संभावित रूप से पुराने संस्करण भी) को रोक नहीं सकते हैं। इसे रोकने का एक तरीका शरीर टैग में एक खाली ऑननलोड ईवेंट हैंडलर विशेषता जोड़ना है:

<body onunload=""> 

यह हैक स्पष्ट रूप से सफारी में बैक-फॉरवर्ड कैश तोड़ता है: बैक बटन पर क्लिक करते समय कोई क्रॉस-ब्राउज़र ऑनलोड ईवेंट होता है?


मैंने web.config मार्ग उपयोगी पाया (इसे उत्तर में जोड़ने की कोशिश की लेकिन ऐसा लगता है कि यहां पोस्ट नहीं किया गया है)

<configuration>
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
            <!-- HTTP 1.1. -->
            <add name="Pragma" value="no-cache" />
            <!-- HTTP 1.0. -->
            <add name="Expires" value="0" />
            <!-- Proxies. -->
        </customHeaders>
    </httpProtocol>
</system.webServer>

और यहां व्यक्त करने के लिए एक्सप्रेस / node.js तरीका है:

app.use(function(req, res, next) {
    res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
    res.setHeader('Pragma', 'no-cache');
    res.setHeader('Expires', '0');
    next();
});

मैंने पाया कि इस पृष्ठ के सभी उत्तरों में अभी भी समस्याएं थीं। विशेष रूप से, मैंने देखा है कि उनमें से कोई भी पृष्ठ को कैश किए गए संस्करण का उपयोग करने से IE8 को रोक देगा जब आपने बैक बटन मारकर इसे एक्सेस किया था।

बहुत से शोध और परीक्षण के बाद, मैंने पाया कि केवल दो शीर्षकों की मुझे वास्तव में आवश्यकता थी:

कैश-कंट्रोल: नो-स्टोर
वेरी: *

वेरी हेडर की व्याख्या के लिए, http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6

आईई 6-8, एफएफ 1.5-3.5, क्रोम 2-3, सफारी 4, और ओपेरा 9-10 पर, इन शीर्षकों ने पेज से लिंक पर क्लिक करते समय पृष्ठ से सर्वर से अनुरोध किया था, या यूआरएल डाला सीधे पता बार में। इसमें जनवरी 10 के रूप में उपयोग में आने वाले सभी ब्राउज़रों में से 99% शामिल हैं।

आईई 6, और ओपेरा 9-10 पर, बैक बटन पर टक्कर मारने से कैश किए गए संस्करण को लोड किया गया। मैंने परीक्षण किए गए सभी अन्य ब्राउज़रों पर, सर्वर से एक नया संस्करण प्राप्त किया। अब तक, मुझे हेडर का कोई भी सेट नहीं मिला है, जिससे आप ब्राउज़र को बैक बटन दबाते समय पृष्ठों के कैश किए गए संस्करणों को वापस नहीं कर पाएंगे।

अद्यतन: इस उत्तर को लिखने के बाद, मुझे एहसास हुआ कि हमारा वेब सर्वर स्वयं को HTTP 1.0 सर्वर के रूप में पहचान रहा है। मैंने जो शीर्षलेख सूचीबद्ध किए हैं, वे HTTP 1.0 सर्वर से प्रतिक्रियाओं के लिए ब्राउज़र द्वारा कैश किए जाने के लिए सही हैं। HTTP 1.1 सर्वर के लिए, बलुस के answer


ये निर्देश किसी भी सुरक्षा जोखिम को कम नहीं करते हैं। वे वास्तव में UAA को अस्थिर जानकारी को ताज़ा करने के लिए मजबूर करना चाहते हैं, न कि UA को जानकारी को बनाए रखने से रोकें। इसी तरह के सवाल देखें। कम से कम, इस बात की कोई गारंटी नहीं है कि किसी भी राउटर, प्रॉक्सी आदि कैशिंग निर्देशों को भी अनदेखा नहीं करेंगे।

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


स्वीकार किए गए उत्तर IIS7 + के लिए काम नहीं करते हैं, कैश हेडर के बारे में बड़ी संख्या में प्रश्नों से जाकर II7 में नहीं भेजा जा रहा है:

  • कुछ कैश-नियंत्रण रखने के लिए प्रतिक्रियाओं को मजबूर कर रहा है: आईआईएस 7 में निजी
  • आईआईएस 7: कैश सेटिंग काम नहीं कर रहा है ... क्यों?
  • आईआईएस 7 + एएसपी.नेट एमवीसी क्लाइंट कैशिंग हेडर काम नहीं कर रहे हैं
  • एएसपीएक्स पृष्ठों के लिए कैश-नियंत्रण सेट करें
  • कैश-कंट्रोल: आईआईएस 7 + एएसपी.नेट एमवीसी में क्लाइंट ब्राउजर को नो-स्टोर, रीडायडिडेट नहीं भेजा जाना चाहिए

और इसी तरह

स्वीकार्य उत्तर सही है जिसमें शीर्षलेख सेट किए जाने चाहिए, लेकिन यह नहीं कि उन्हें कैसे सेट किया जाना चाहिए। इस तरह आईआईएस 7 के साथ काम करता है:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "-1");

पहली पंक्ति Cache-control को Cache-control पर सेट करती है, और दूसरी पंक्ति अन्य विशेषताएँ no-store, must-revalidate जोड़ती है no-store, must-revalidate


HTTP 1.1 के लिए आरएफसी का कहना है कि HTTP विधि को जोड़ने के लिए उचित विधि है:

कैश-कंट्रोल: नो-कैश

पुराने ब्राउज़र इसे अनदेखा कर सकते हैं अगर वे HTTP 1.1 के ठीक से अनुपालन नहीं कर रहे हैं। उन लोगों के लिए आप हेडर को आजमा सकते हैं:

प्रगमा: नो-कैश

यह HTTP 1.1 ब्राउज़र के लिए भी काम करना चाहिए।


Also, just for good measure, make sure you reset the ExpiresDefault in your .htaccess file if you're using that to enable caching.

ExpiresDefault "access plus 0 seconds"

Afterwards, you can use ExpiresByType to set specific values for the files you want to cache:

ExpiresByType image/x-icon "access plus 3 month"

This may also come in handy if your dynamic files eg php, etc. are being cached by the browser, and you can't figure out why. Check ExpiresDefault .


I just want to point out that if someone wants to prevent caching ONLY dynamic content, adding those additional headers should be made programmatically.

I edited configuration file of my project to append no-cache headers, but that also disabled caching static content, which isn't usually desirable. Modifying response headers in code assures that images and style files will be cached.

This is quite obvious, yet still worth mentioning.

And another caution. Be careful using ClearHeaders method from HttpResponse class. It may give you some bruises if you use it recklessly. Like it gave me.

After redirecting on ActionFilterAttribute event the consequences of clearing all headers are losing all session data and data in TempData storage. It's safer to redirect from an Action or don't clear headers when redirection is taking place.

On second thought I discourage all to use ClearHeaders method. It's better to remove headers separately. And to set Cache-Control header properly I'm using this code:

filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.AppendCacheExtension("no-store, must-revalidate");

In addition to the headers consider serving your page via https . Many browsers will not cache https by default.


कैशिंग पर केस स्टडी के लिए यह लिंक देखें:

http://securityevaluators.com/knowledge/case_studies/caching/

लेख के अनुसार सारांश, केवल Cache-Control: no-storeक्रोम, फ़ायरफ़ॉक्स और आईई पर काम करता है। आईई अन्य नियंत्रण स्वीकार करता है, लेकिन क्रोम और फ़ायरफ़ॉक्स नहीं है। लिंक कैशिंग के इतिहास और अवधारणा के सबूत दस्तावेज के इतिहास के साथ एक अच्छा पढ़ा गया है।


//In .net MVC
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult FareListInfo(long id)
{
}

// In .net webform
<%@ OutputCache NoStore="true" Duration="0" VaryByParam="*" %>




http-headers