Cache-Control — यह क्या है, निर्देश और कैश प्रबंधन

लेखक: IT Sectr प्रकाशित: 2026-03-09 पढ़ने का समय: 9 मिनट

Cache-Control एक HTTP हेडर है जो निर्देशों के सेट के माध्यम से क्लाइंट, प्रॉक्सी सर्वर और CDN पर संसाधनों के कैशिंग नियमों को परिभाषित करता है। पुराने Expires हेडर के विपरीत, Cache-Control दर्जनों संयोजनों का समर्थन करता है: max-age सेकंड में जीवनकाल निर्धारित करता है, private और public कैश उपलब्धता को नियंत्रित करते हैं, no-cache और no-store — अनिवार्य सत्यापन। Google Web Dev (2025) के अनुसार, उचित Cache-Control कॉन्फ़िगरेशन बार-बार विज़िट के लिए पेज लोड समय को 50-80% तक कम कर सकता है। यह हेडर को वेब और मोबाइल एप्लिकेशन प्रदर्शन के लिए महत्वपूर्ण बनाता है।

मुख्य बिंदु

  • Cache-Control — एक HTTP हेडर जिसमें निर्देश होते हैं जो क्लाइंट, प्रॉक्सी और CDN पर कैशिंग को नियंत्रित करते हैं
  • max-age — एक प्रमुख निर्देश जो बिना पुन: सत्यापन के सेकंड में संसाधन का जीवनकाल निर्धारित करता है
  • private vs public — private केवल क्लाइंट पर कैश की अनुमति देता है, public प्रॉक्सी और CDN पर भी
  • no-cache vs no-store — no-cache को उपयोग से पहले सत्यापन की आवश्यकता है, no-store पूरी तरह से कैश प्रतिबंधित करता है
  • s-maxage — ब्राउज़रों को प्रभावित किए बिना साझा कैश के लिए max-age को ओवरराइड करता है

Cache-Control क्या है?

Cache-Control एक HTTP हेडर है, जो HTTP/1.1 (RFC 7234) में मानकीकृत है, जो सर्वर को यह निर्दिष्ट करने की अनुमति देता है कि क्लाइंट, प्रॉक्सी और CDN प्रतिक्रिया को कैसे और कितने समय तक कैश कर सकते हैं। Expires (HTTP/1.0) के विपरीत, Cache-Control निर्देशों का उपयोग करता है — अल्पविराम से संयुक्त टेक्स्ट कमांड: Cache-Control: public, max-age=3600, must-revalidate। हेडर कैशिंग श्रृंखला में प्रत्येक लिंक पर सूक्ष्म नियंत्रण प्रदान करता है।

कैशिंग वेब और मोबाइल एप्लिकेशन प्रदर्शन के मूलभूत तंत्रों में से एक है। इसके बिना, प्रत्येक उपयोगकर्ता अनुरोध सीधे सर्वर पर जाएगा, जिससे अत्यधिक लोड और विलंबता होगी। Cache-Control तीन कैशिंग स्तरों को परिभाषित करता है: ब्राउज़र/एप्लिकेशन (निजी कैश), प्रॉक्सी सर्वर (साझा कैश), और CDN (वितरित कैश)। प्रत्येक स्तर निर्देशों की अलग-अलग व्याख्या करता है।

गलत Cache-Control कॉन्फ़िगरेशन प्रदर्शन समस्याओं के सबसे सामान्य कारणों में से एक है। बहुत आक्रामक कैशिंग से उपयोगकर्ता पुराना डेटा देखते हैं। बहुत कमज़ोर कैशिंग से सर्वर पर अत्यधिक अनुरोध और धीमी लोडिंग होती है। Akamai (2025) के अनुसार, स्थैतिक सामग्री के लिए Cache-Control को अनुकूलित करने से सर्वर लोड 70-90% कम हो जाता है और मोबाइल उपयोगकर्ताओं के लिए लोड समय 40-60% में सुधार होता है।

हेडर का इतिहास

Cache-Control HTTP/1.1 (RFC 2616, 1999) में Expires के प्रतिस्थापन के रूप में दिखाई दिया। Expires में एक मूलभूत समस्या थी: यह एक पूर्ण तिथि का उपयोग करता था जो सर्वर और क्लाइंट समय क्षेत्रों पर निर्भर करती थी। Cache-Control ने सापेक्ष समय (प्रतिक्रिया प्राप्त होने के क्षण से सेकंड में max-age) पर स्विच करके इस समस्या को हल किया। बाद में, RFC 7234 (2014) में, नए निर्देश जोड़े गए: स्थैतिक संपत्तियों के लिए immutable, विलंबित सत्यापन के लिए stale-while-revalidate और stale-if-error।

Cache-Control निर्देश

Cache-Control में तीन समूहों में विभाजित 10 से अधिक निर्देश शामिल हैं: अनुरोध निर्देश (क्लाइंट → सर्वर), प्रतिक्रिया निर्देश (सर्वर → क्लाइंट), और एक्सटेंशन। व्यवहार में, मोबाइल विकास 6-7 मुख्य प्रतिक्रिया निर्देशों का उपयोग करता है जो 95% कैशिंग परिदृश्यों को कवर करते हैं। आइए प्रत्येक को उदाहरणों और अनुशंसाओं के साथ देखें।

निर्देशअर्थउदाहरण
max-ageप्रतिक्रिया के क्षण से सेकंड में जीवनकालmax-age=3600 — 1 घंटा
s-maxageसाझा कैश (प्रॉक्सी, CDN) के लिए max-ages-maxage=86400 — CDN के लिए 1 दिन
publicसभी को कैशिंग की अनुमति देता है (प्रॉक्सी सहित)public, max-age=3600
privateकेवल ब्राउज़र/एप्लिकेशन के लिए कैश की अनुमति देता हैprivate, max-age=600
no-cacheसत्यापन के बिना उपयोग न करें (304 आवश्यक)no-cache
no-storeपूरी तरह से कैशिंग प्रतिबंधित करेंno-store
must-revalidatemax-age के बाद, मूल सर्वर से पुन: सत्यापन करेंmax-age=3600, must-revalidate
immutableसंसाधन नहीं बदलेगा (संस्करणित स्थैतिक संपत्तियों के लिए)max-age=31536000, immutable

max-age सबसे महत्वपूर्ण निर्देश है। यह क्लाइंट को निर्दिष्ट समय के लिए सर्वर पर अनुरोध करने से रोकता है। स्थैतिक संपत्तियों (CSS, JS, इमेज) के लिए, max-age आमतौर पर 1 दिन से 1 वर्ष तक निर्धारित किया जाता है। API प्रतिक्रियाओं के लिए — 0 सेकंड (हमेशा ताज़ा डेटा) से 5-10 मिनट (संदर्भ डेटा) तक। s-maxage CDN और ब्राउज़र के लिए अलग-अलग जीवनकाल निर्धारित करने की अनुमति देता है: CDN 1 दिन के लिए एक प्रतिलिपि संग्रहीत करता है, ब्राउज़र 1 घंटे के लिए।

no-cache बनाम no-store

ये दो निर्देश अक्सर भ्रमित होते हैं। no-cache कैशिंग को प्रतिबंधित नहीं करता है — इसे प्रत्येक उपयोग पर सशर्त अनुरोध (If-Modified-Since या If-None-Match) के माध्यम से कैश की गई प्रतिलिपि को सत्यापित करने की आवश्यकता है। यदि सर्वर 304 के साथ प्रतिक्रिया करता है — क्लाइंट कैश का उपयोग करता है। यदि 200 — यह अपडेट करता है। दूसरी ओर, no-store, डिस्क और मेमोरी सहित किसी भी कैश में प्रतिक्रिया को सहेजने से पूरी तरह से प्रतिबंधित करता है। केवल संवेदनशील डेटा के लिए no-store का उपयोग करें — टोकन, भुगतान डेटा, व्यक्तिगत दस्तावेज़।

Cache-Control बनाम Expires

Expires हेडर (HTTP/1.0) भी संसाधन के जीवनकाल को निर्दिष्ट करता है लेकिन एक पूर्ण तिथि का उपयोग करता है: Expires: Thu, 03 Jul 2026 12:00:00 GMT. Cache-Control max-age प्रतिक्रिया के क्षण से सापेक्ष समय का उपयोग करता है। अंतर वितरित सिस्टम के लिए महत्वपूर्ण है: यदि सर्वर और क्लाइंट अलग-अलग समय क्षेत्रों में हैं, तो Expires की गलत व्याख्या की जा सकती है। Cache-Control में यह समस्या नहीं है — 3600 सेकंड हमेशा 3600 सेकंड होते हैं।

जब दोनों हेडर मौजूद होते हैं, Cache-Control की प्राथमिकता Expires पर होती है। यह RFC 7234 में परिभाषित है: “यदि प्रतिक्रिया में max-age निर्देश के साथ Cache-Control फ़ील्ड शामिल है, तो प्राप्तकर्ता को Expires फ़ील्ड को अनदेखा करना चाहिए।” व्यवहार में, आधुनिक क्लाइंट के लिए Expires को बिल्कुल भी वापस न करने की अनुशंसा की जाती है, क्योंकि Cache-Control सभी Expires परिदृश्यों को कवर करता है। हालांकि, पुराने प्रॉक्सी और ब्राउज़र के साथ पिछड़ी संगतता के लिए, दोनों हेडर वापस किए जा सकते हैं।

Expires मुख्य रूप से Nginx और Apache पर स्थैतिक सामग्री के लिए बचा है — ये सर्वर स्वचालित रूप से दोनों हेडर जोड़ते हैं। यदि आपका प्रोजेक्ट Cache-Control के बिना Expires का सामना करता है, तो इसे max-age के साथ Cache-Control से बदलें: कैश नियंत्रण सटीकता में सुधार होता है, और समय क्षेत्र पर निर्भरता समाप्त हो जाती है। माइग्रेशन के लिए, सर्वर को Expires के बजाय Cache-Control जोड़ने के लिए कॉन्फ़िगर करना पर्याप्त है।

nginx
# Nginx: स्थैतिक फ़ाइलों के लिए Cache-Control
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable, max-age=2592000";
}

# बिभिन्न प्रकार की सामग्री के लिए भिन्न नीतियाँ
location /api/config {
    expires -1;
    add_header Cache-Control "no-cache, must-revalidate";
}

location /api/static-data {
    expires 5m;
    add_header Cache-Control "public, max-age=300";
}

Nginx कॉन्फ़िगरेशन में, स्थैतिक फ़ाइलों (CSS, JS, इमेज) को immutable विशेषता के साथ 30 दिनों के लिए Cache-Control पर सेट किया जाता है — यह विशेषता ब्राउज़र को बताती है कि संसाधन इस URL पर कभी नहीं बदलता है (फ़ाइल नाम में हैश के माध्यम से संस्करणीकरण)। API एंडपॉइंट गतिशील डेटा के लिए no-cache और संदर्भ डेटा के लिए छोटे max-age के साथ public का उपयोग करते हैं — अक्सर अनुरोधित और शायद ही कभी बदलने वाली सूचियाँ।

मोबाइल एप्लिकेशन में कैशिंग

मोबाइल एप्लिकेशन में, Cache-Control मोबाइल नेटवर्क की सीमाओं के कारण एक विशेष भूमिका निभाता है: उच्च विलंबता, अस्थिर कनेक्शन, ट्रैफ़िक सीमाएँ। उचित कैशिंग उपयोगकर्ता को तुरंत डेटा प्रदर्शित करने की अनुमति देती है, ऑफ़लाइन भी, और इसे पृष्ठभूमि में अपडेट करती है। Android पर OkHttp और iOS पर URLSession में अंतर्निहित कैशिंग सिस्टम हैं जो Cache-Control का सम्मान करते हैं।

OkHttp CacheInterceptor का उपयोग करता है, जो प्रतिक्रिया से Cache-Control पढ़ता है और स्वचालित रूप से कैशिंग प्रबंधित करता है। यदि सर्वर Cache-Control: max-age=3600 लौटाता है, तो OkHttp एक घंटे के लिए सर्वर पर अनुरोध नहीं करेगा। max-age समाप्त होने के बाद, OkHttp If-Modified-Since और If-None-Match के साथ एक सशर्त अनुरोध भेजता है। OkHttp में कैश कॉन्फ़िगरेशन: OkHttpClient.Builder().cache(Cache(directory, maxSize)).

kotlin
fun createCachedClient(cacheDir: File): OkHttpClient {
    return OkHttpClient.Builder()
        .cache(Cache(cacheDir, 10L * 1024 * 1024))
        .addNetworkInterceptor { chain ->
            val response = chain.proceed(chain.request())
            response.newBuilder()
                .header("Cache-Control",
                    "public, max-age=300")
                .removeHeader("Pragma")
                .build()
        }
        .build()
}

कोड 10 MB कैश के साथ एक OkHttpClient बनाता है और NetworkInterceptor के माध्यम से Cache-Control को ओवरराइड करता है। यदि सर्वर Cache-Control वापस नहीं करता है या Expires का उपयोग करता है, तो इंटरसेप्टर public, max-age=300 (5 मिनट) जोड़ता है। इंटरसेप्टर संगतता के लिए पुराने Pragma हेडर (HTTP/1.0) को हटा देता है। iOS पर कैशिंग memoryCapacity और diskCapacity सेटिंग्स के साथ URLCache.shared के माध्यम से समान रूप से काम करती है।

ऑफ़लाइन मोड और stale-while-revalidate

stale-while-revalidate निर्देश उपयोगकर्ता को पुराना कैश दिखाने की अनुमति देता है जबकि एप्लिकेशन पृष्ठभूमि में ताज़ा डेटा लाता है। यह तत्काल प्रतिक्रिया प्रभाव प्रदान करता है: उपयोगकर्ता तुरंत सामग्री देखता है, और एक सेकंड के बाद यह वर्तमान संस्करण में अपडेट हो जाता है। OkHttp संस्करण 3.10 और iOS 14+ पर URLCache द्वारा समर्थित। उदाहरण: Cache-Control: max-age=3600, stale-while-revalidate=300 — 1 घंटा ताज़ा कैश, फिर पृष्ठभूमि रीफ़्रेश के साथ 5 मिनट पुराना डेटा दिखाना।

Cache-Control कॉन्फ़िगरेशन उदाहरण

विभिन्न संसाधन प्रकारों को विभिन्न कैशिंग रणनीतियों की आवश्यकता होती है। आइए मोबाइल विकास में विशिष्ट परिदृश्यों के लिए इष्टतम कॉन्फ़िगरेशन देखें। फ़ाइल नाम में हैश वाली स्थैतिक सामग्री (bundle.abc123.js) के लिए, आप immutable के साथ max-age को 1 वर्ष तक सेट कर सकते हैं। शायद ही कभी अपडेट होने वाली API सूचियों (निर्देशिकाएँ, श्रेणियाँ) के लिए — stale-while-revalidate के साथ 5 मिनट से 1 घंटे तक max-age।

संसाधन प्रकारCache-Controlस्पष्टीकरण
संस्करणित स्थैतिक संपत्तियाँpublic, max-age=31536000, immutable1 वर्ष, फ़ाइलें नहीं बदलतीं (URL में हैश)
गैर-संस्करणित स्थैतिक संपत्तियाँpublic, max-age=86400, must-revalidateबाद में अनिवार्य पुन: सत्यापन के साथ 1 दिन
API: संदर्भ डेटाpublic, max-age=600, stale-while-revalidate=6010 मिनट कैश + 1 मिनट पुराना
API: उपयोगकर्ता डेटाprivate, max-age=601 मिनट, केवल एक विशिष्ट उपयोगकर्ता के लिए
API: संवेदनशील डेटाno-storeपूर्ण कैश प्रतिबंध
HTML पेजno-cache, must-revalidateप्रत्येक अनुरोध पर सत्यापन, अपरिवर्तित होने पर 304

सुरक्षा याद रखना महत्वपूर्ण है: व्यक्तिगत उपयोगकर्ता डेटा वाली प्रतिक्रियाओं के लिए, हमेशा private सेट करें। इस निर्देश के बिना, एक सार्वजनिक प्रॉक्सी (उदा., कॉर्पोरेट) प्रतिक्रिया को कैश कर सकता है और इसे किसी अन्य उपयोगकर्ता को दे सकता है। प्रमाणीकरण टोकन और भुगतान जानकारी के लिए, no-store का उपयोग करें — निजी कैश को भी इस डेटा को डिस्क पर संग्रहीत नहीं करना चाहिए।

कैशिंग डिबगिंग

Cache-Control सहीता सत्यापित करने के लिए, Age हेडर (कैश कितने सेकंड से संग्रहीत है) और X-Cache (CDN पर hit/miss) का उपयोग करें। ब्राउज़र में — Network टैब, Size कॉलम “from disk cache” या “304 Not Modified” दिखाता है। यदि किसी संसाधन को कैश किया जाना चाहिए लेकिन हर बार लोड होता है, तो जांचें कि क्या सर्वर आपके निर्देशों के साथ Cache-Control: no-cache या Pragma: no-cache जोड़ रहा है।

अक्सर पूछे जाने वाले प्रश्न

max-age और s-maxage में क्या अंतर है?

max-age सभी कैश पर लागू होता है (ब्राउज़र सहित), s-maxage केवल साझा कैश (प्रॉक्सी, CDN) पर लागू होता है। यदि s-maxage निर्दिष्ट है, CDN max-age को अनदेखा करता है और s-maxage का उपयोग करता है। यह ब्राउज़र और CDN के लिए अलग-अलग जीवनकाल निर्धारित करने की अनुमति देता है।

क्या Cache-Control भेजने के बाद कैशिंग रद्द की जा सकती है?

नहीं, max-age के साथ प्रतिक्रिया भेजने के बाद, क्लाइंट टाइमर समाप्त होने तक अनुरोध नहीं करेगा। तत्काल कैश अमान्यकरण के लिए, आपको संसाधन URL बदलना होगा (संस्करण/हैश जोड़ें) और मजबूर रीसेट के लिए push सूचनाएँ या WebSocket संदेश भेजना होगा।

immutable निर्देश क्या है?

immutable निर्देश (RFC 8246) ब्राउज़र को बताता है कि संसाधन इस URL पर कभी नहीं बदलेगा। ब्राउज़र पेज रीफ़्रेश करते समय सशर्त अनुरोध करने का प्रयास भी नहीं करता है — वह max-age समाप्त होने तक कैश का उपयोग करता है। केवल संस्करणित फ़ाइलों के साथ काम करता है।

Cache-Control SEO को कैसे प्रभावित करता है?

Googlebot Cache-Control को ध्यान में रखता है: लंबी कैशिंग बार-बार क्रॉलिंग को गति देती है। तेज़ कैश के साथ noindex ठीक है। no-store इंडेक्सिंग को धीमा कर सकता है क्योंकि Googlebot हर बार पेज को स्क्रैच से लोड करेगा। बहुत छोटा max-age क्रॉलिंग के दौरान सर्वर लोड बढ़ाता है।

Express.js में Cache-Control कैसे कॉन्फ़िगर करें?

helmet या middleware के माध्यम से: res.set('Cache-Control', 'public, max-age=3600'). स्थैतिक फ़ाइलों के लिए, maxAge पैरामीटर के साथ express.static का उपयोग करें: express.static('public', {maxAge: '1y'}). गतिशील रूट के लिए — प्रत्येक हैंडलर में व्यक्तिगत रूप से।

सारांश

  • Cache-Control — एक लचीली निर्देश प्रणाली के साथ कैश प्रबंधन के लिए मुख्य HTTP हेडर
  • max-age — प्रतिक्रिया के क्षण से सेकंड में जीवनकाल; सभी कैशिंग परिदृश्यों के लिए मुख्य निर्देश
  • private vs public — private केवल क्लाइंट के लिए, public प्रॉक्सी और CDN के लिए; डेटा सुरक्षा को प्रभावित करता है
  • no-cache को सत्यापन की आवश्यकता है, no-store पूरी तरह से कैश प्रतिबंधित करता है; अलग-अलग उद्देश्य, भ्रमित न करें
  • s-maxage — साझा कैश के लिए max-age को ओवरराइड करता है, ब्राउज़र/CDN नीतियों को विभाजित करने के लिए उपयोगी
  • stale-while-revalidate — तत्काल UX के लिए पृष्ठभूमि रीफ़्रेश के साथ पुराना कैश दिखाना
  • अनुशंसा — सर्वर और मोबाइल HTTP क्लाइंट पर प्रत्येक संसाधन प्रकार के लिए Cache-Control कॉन्फ़िगर करें

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें