HTTP कैश-कंट्रोल हेडर कैलकुलेटर
Cache-Control HTTP हेडर ब्राउज़र, प्रॉक्सी और CDN को बताता है कि किसी रिस्पॉन्स को कैसे - और कितनी देर तक - कैश किया जा सकता है। इसे गलत सेट करना पुराना (stale) कंटेंट यूज़र तक पहुंचने या सर्वर पर ज़रूरत से ज़्यादा रिक्वेस्ट आने का सबसे बड़ा कारण है। यह टूल कुछ आसान विकल्पों से एक सही Cache-Control हेडर बनाता है और हर डायरेक्टिव का मतलब समझाता है।
Cache-Control क्या है?
Cache-Control एक रिस्पॉन्स हेडर है जिसे RFC 9111 (HTTP Caching स्पेसिफिकेशन) में परिभाषित किया गया है। एक सामान्य वैल्यू ऐसी दिखती है:
Cache-Control: public, max-age=3600, s-maxage=600, stale-while-revalidate=86400
कॉमा से अलग किया गया हर हिस्सा एक डायरेक्टिव है। कुछ डायरेक्टिव में संख्यात्मक वैल्यू होती है (जैसे max-age=3600), और कुछ सिर्फ फ्लैग होते हैं (जैसे must-revalidate)।
यह कैलकुलेटर जिन डायरेक्टिव को कवर करता है
- कैशेबिलिटी - इनमें से बिल्कुल एक:
public- कोई भी कैश (ब्राउज़र, प्रॉक्सी, CDN) रिस्पॉन्स को स्टोर कर सकता है।private- सिर्फ यूज़र का ब्राउज़र इसे कैश कर सकता है; शेयर्ड कैश (जैसे CDN) नहीं कर सकते।no-cache- कैश स्टोर तो कर सकते हैं, लेकिन इस्तेमाल से पहले हर बार सर्वर से रिवैलिडेट करना ज़रूरी है।no-store- कुछ भी कैश नहीं होगा; हर रिक्वेस्ट सीधे ओरिजिन सर्वर तक जाएगी।
max-age=<सेकंड>- रिस्पॉन्स बनने के बाद कितनी देर तक इसे फ्रेश माना जाएगा।s-maxage=<सेकंड>-max-ageजैसा ही, लेकिन सिर्फ शेयर्ड कैश (CDN, रिवर्स प्रॉक्सी) पर लागू होता है; ब्राउज़र इसे नज़रअंदाज़ करते हैं।stale-while-revalidate=<सेकंड>- फ्रेशनेस खत्म होने के बाद, कैश इतने अतिरिक्त सेकंड तक पुराना कॉपी दिखा सकता है जबकि बैकग्राउंड में नया फेच होता है।stale-if-error=<सेकंड>- अगर रिवैलिडेशन के दौरान ओरिजिन सर्वर में एरर आए, तो कैश एरर दिखाने के बजाय इतने सेकंड तक पुरानी कॉपी दिखा सकता है।must-revalidate- एक बार स्टेल होने पर, बिना सफल रिवैलिडेशन के दोबारा सर्व नहीं किया जा सकता।immutable- ब्राउज़र को बताता है कि फ्रेश रहते हुए रिस्पॉन्स कभी नहीं बदलेगा, इसलिए रीलोड पर भी रिवैलिडेशन की ज़रूरत नहीं।no-transform- बीच के प्रॉक्सी को रिस्पॉन्स बॉडी बदलने (जैसे इमेज कंप्रेस करना) से रोकता है।
यह कैलकुलेटर कैसे काम करता है
CDN जैसे शेयर्ड कैश के लिए, s-maxage (अगर मौजूद हो) हमेशा max-age से प्राथमिकता पाता है; ब्राउज़र s-maxage को पूरी तरह नज़रअंदाज़ करते हैं और सिर्फ max-age देखते हैं। कैलकुलेटर सही क्रम में (पहले कैशेबिलिटी टाइप, फिर संख्यात्मक फ्रेशनेस डायरेक्टिव, फिर बूलियन फ्लैग) हेडर स्ट्रिंग बनाता है, जिन डायरेक्टिव की वैल्यू शून्य/ऑफ है उन्हें छोड़ देता है, और अंतिम अवधि को सेकंड, मिनट, घंटे और दिन में तोड़कर दिखाता है।
एक उदाहरण
मान लीजिए आप CDN के ज़रिए एक वर्जन्ड स्टैटिक फ़ाइल (जैसे app.a1b2c3.js) सर्व कर रहे हैं जो पब्लिश होने के बाद कभी नहीं बदलती:
- कैश टाइप:
public - Max-Age:
31536000(1 साल) - s-maxage:
0(ज़रूरत नहीं) - Immutable:
Yes
इससे यह बनेगा:
Cache-Control: public, max-age=31536000, immutable
ब्राउज़र इस फ़ाइल को पूरे एक साल तक कैश रखेंगे और कभी दोबारा जांच नहीं करेंगे।
टूल का इस्तेमाल कैसे करें
- कैशेबिलिटी टाइप चुनें (
public,private,no-cache, याno-store)। Max-Ageसेकंड में डालें (छोड़ने के लिए0रखें)।- ज़रूरत हो तो
s-maxage,stale-while-revalidate, औरstale-if-errorसेट करें। must-revalidate,immutable, औरno-transformको ज़रूरत अनुसार चालू/बंद करें।- बना हुआ हेडर वैल्यू सीधे अपने सर्वर, रिवर्स प्रॉक्सी, या CDN कॉन्फ़िगरेशन में इस्तेमाल करें।