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مشترکہ کیش کے لیے max-age (پراکسی، CDN)s-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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں