परिचय
हेडर का सही न्यूनतम सेट जो सभी उल्लेखित क्लाइंट (और समीप) में काम करता है:
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Cache-Control
प्रति ग्राहकों और प्रॉक्सी (और परोक्ष करने के लिए अगले कुछ ग्राहकों के लिए आवश्यक के लिए HTTP 1.1 कल्पना है Expires
)। Pragma
प्रति प्रागैतिहासिक ग्राहकों के लिए HTTP 1.0 कल्पना है। Expires
HTTP 1.0 और ग्राहकों और प्रॉक्सी के लिए 1.1 चश्मा प्रति है। HTTP 1.1 में, पहले Cache-Control
से अधिक समय लगता है Expires
, इसलिए यह केवल HTTP 1.0 प्रॉक्सी के लिए ही है।
यदि आप केवल HTTPS से अधिक पृष्ठों की सेवा करते समय IE6 और इसके टूटे हुए कैशिंग के बारे में परवाह नहीं करते हैं no-store
, तो आप छोड़ सकते हैं Cache-Control: no-cache
।
Cache-Control: no-store, must-revalidate
Pragma: no-cache
Expires: 0
यदि आप IE6 और HTTP 1.0 क्लाइंट (HTTP 1.1 1997 में पेश किए गए थे) के बारे में परवाह नहीं करते हैं, तो आप छोड़ सकते हैं 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
पैरामीटर जैसे कि max-age
अप्रासंगिक हैं यदि उपरोक्त Cache-Control
पैरामीटर निर्दिष्ट हैं। 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.
ASP.NET-MVC का उपयोग करना
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.
ASP.NET वेब API का उपयोग करना:
// `response` is an instance of System.Net.Http.HttpResponseMessage
response.Headers.CacheControl = new CacheControlHeaderValue
{
NoCache = true,
NoStore = true,
MustRevalidate = true
};
response.Headers.Pragma.ParseAdd("no-cache");
// We can't use `response.Content.Headers.Expires` directly
// since it allows only `DateTimeOffset?` values.
response.Content?.Headers.TryAddWithoutValidation("Expires", 0.ToString());
ASP.NET का उपयोग करना:
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.
ASP.NET Core v3 का उपयोग करना
// using Microsoft.Net.Http.Headers
Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store, must-revalidate";
Response.Headers[HeaderNames.Expires] = "0";
Response.Headers[HeaderNames.Pragma] = "no-cache";
ASP का उपयोग करना:
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.
रूबी ऑन रेल्स, या पायथन / फ्लास्क का उपयोग करना:
headers["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1.
headers["Pragma"] = "no-cache" # HTTP 1.0.
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')
)
)
उपयोग करना:
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.
अपाचे .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">
HTML मेटा टैग बनाम HTTP प्रतिक्रिया हेडर
यह जानना महत्वपूर्ण है कि जब एचटीएमएल पेज को HTTP कनेक्शन पर परोसा जाता है, और एचटीटीपी प्रतिक्रिया हेडर और एचटीएमएल टैग दोनों में एक हेडर मौजूद होता है <meta http-equiv>
, तो एचटीटीपी प्रतिक्रिया हेडर में निर्दिष्ट एचटीएमएल मेटा टैग पर पूर्ववर्तीता प्राप्त होगी। HTML मेटा टैग का उपयोग केवल तब किया जाएगा जब पृष्ठ को file://
URL के माध्यम से स्थानीय डिस्क फ़ाइल सिस्टम से देखा जाए । W3 HTML कल्पना अध्याय 5.2.2 भी देखें । इस बात का ध्यान रखें जब आप उन्हें प्रोग्रामेटिक रूप से निर्दिष्ट नहीं करते हैं क्योंकि वेबसर्वर अर्थात् कुछ डिफ़ॉल्ट मान शामिल कर सकते हैं।
आम तौर पर, आप शुरुआत से भ्रम से बचने और हार्ड HTTP प्रतिक्रिया हेडर पर भरोसा करने के लिए HTML मेटा टैग को बेहतर नहीं कहेंगे। इसके अलावा, विशेष रूप से वे <meta http-equiv>
टैग HTML5 में अमान्य हैं । केवल http-equiv
में सूचीबद्ध मानों एचटीएमएल 5 विनिर्देश की अनुमति है।
वास्तविक HTTP प्रतिक्रिया हेडर का सत्यापन
एक और दूसरे को सत्यापित करने के लिए, आप उन्हें वेब ट्रैवर्स डेवलपर के टूलसेट के HTTP ट्रैफिक मॉनिटर में देख / डिबग कर सकते हैं। Chrome / Firefox23 + / IE9 + में F12 दबाकर, और फिर "नेटवर्क" या "नेट" टैब पैनल खोलकर, और फिर HTTP अनुरोध और प्रतिक्रिया के बारे में सभी विवरणों को उजागर करने के लिए HTTP के अनुरोध पर क्लिक करके प्राप्त कर सकते हैं। नीचे स्क्रीनशॉट क्रोम से है:
मैं उन हेडर को फ़ाइल डाउनलोड पर भी सेट करना चाहता हूं
सबसे पहले, यह सवाल और जवाब "वेब पेज" (HTML पेज) पर लक्षित होता है, न कि "फाइल डाउनलोड" (पीडीएफ, ज़िप, एक्सेल आदि) पर। बेहतर होगा कि आप उन्हें कैश्ड करें और यूआरआई पथ में कहीं न कहीं कुछ फ़ाइल संस्करण पहचानकर्ता का उपयोग करें या एक परिवर्तित फ़ाइल पर एक रीडाउट को मजबूर करने के लिए क्वेरिस्ट्रिंग करें। फ़ाइल डाउनलोड पर उन नो-कैश हेडर को वैसे भी लागू करते हैं, तो HTTP के बजाय HTTPS पर फ़ाइल डाउनलोड की सेवा करते समय IE7 / 8 बग से सावधान रहें। विस्तार के लिए, देखें IE foo.jsf डाउनलोड नहीं कर सकता है। IE इस इंटरनेट साइट को खोलने में सक्षम नहीं था। अनुरोधित साइट या तो अनुपलब्ध है या नहीं मिल सकती है ।