Cache-Control وETag: كيف تمنع إعادة تحميل ما لم يتغير؟

Cache-Control و ETag: كيف تمنع إعادة تحميل ما لم يتغير؟

دليل عملي ل ـHTTP caching يشرح freshness و revalidation و ETag و immutable، وكيف تختار سياسة لل HTML و CSS و API بدون تقديم بيانات قديمة.

دليل عملي

دليل عملي لـHTTP caching يشرح freshness وrevalidation وETag وimmutable، وكيف تختار سياسة للHTML وCSS وAPI بدون تقديم بيانات قديمة.

6خطوات
عمليالمستوى

ال ـCache الأسرع هي الطلب الذي لا يحتاج تنزيل المحتوى مرة أخرى، لكن caching غير المنضبطة قد تعرض ملفات أو بيانات قديمة. HTTP يوفر أدوات دقيقة: Cache-Control تحدد مدة freshness ومن يحق له التخزين، و ETag أو Last-Modified تسمح للعميل بسؤال الخادم هل تغير المورد بدل تنزيله كاملًا. أفضل سياسة تختلف بين HTML ديناميكية و assets بإصدار ثابت و API شخصية.

Freshness تجيب: هل أحتاج الرجوع للخادم؟

max-age تحدد مدة اعتبار response حديثة. خلال هذه الفترة قد يستخدم المتصفح النسخة المحلية بلا revalidation. هذا مناسب لملف اسمه يتغير عند كل build، لكنه قد يكون خطرًا لصفحة حساب أو بيانات سريعة التغير.

ETag تجعل إعادة التحقق رخيصة

الخادم يرسل ETag تمثل نسخة المورد. في الطلب التالي يرسل العميل If-None-Match، وإذا لم يتغير المحتوى يرد الخادم 304 بدون body كاملة. ETag يجب أن تتغير عندما يتغير representation الذي يهم العميل.

خطوات عملية

  1. أرسل ETag.
  2. اسمح للعميل بالتخزين.
  3. استقبل If-None-Match.
  4. قارن النسخة.
  5. أعد 304 إن لم تتغير.
  6. أرسل body جديدة و ETag جديدة عند التغيير.

استخدم أسماء ملفات hashed للأصول الثابتة

CSS و JS والصور الناتجة من build يمكن تسميتها باسم يحتوي hash، مثل app.abcd1234.js. عندها تستطيع إعطاء Cache طويلة و immutable، لأن أي تغيير ينتج URL جديدة. هذا أفضل من جعل كل asset تعيد التحقق كل مرة.

HTML تحتاج سياسة أكثر تحفظًا

صفحة HTML قد تشير إلى assets جديدة أو تحتوي بيانات مخصصة. استخدم max-age قصيرة أو revalidation حسب التطبيق. لا تجعل HTML سنة كاملة immutable إلا إذا كان URL نفسه versioned ولا يتغير المحتوى.

قائمة مراجعة

  • Static assets versioned.
  • HTML لها freshness مناسبة.
  • Responses الشخصية ليست public cache.
  • Vary مضبوط عندما تختلف الاستجابة حسب header.
  • ETag تعكس المحتوى الفعلي.
  • Cache purge أو versioning معروف عند النشر.

احذر من Vary والانفجار في النسخ

Vary يخبر cache أن الاستجابة تختلف حسب headers مثل Accept-Encoding. إضافة headers كثيرة أو عالية التنوع قد تخلق نسخًا كثيرة وتقلل hit rate. استخدمها فقط عندما representation تختلف فعليًا.

اختبر من Network panel

راقب Size و Status و Age و from memory/disk cache، ثم أعد التحميل الطبيعي والقسري. لا تقيس السرعة مع Disable cache ثم تستنتج أن caching لا تعمل. اختبر أيضًا نشر Version جديدة وتأكد أن المستخدم يصل لها.

stale-while-revalidate توازن بين السرعة والحداثة

بعض الموارد يمكن عرض نسخة قديمة قصيرة المدى فورًا ثم تحديثها في الخلفية. directive مثل stale-while-revalidate تساعد على ذلك في caches الداعمة. استخدمها فقط عندما قبول stale data لفترة محدودة لا يضر المستخدم. لا تستخدمها لبيانات مالية أو حالة أمنية يجب أن تكون لحظية.

Conditional Requests ليست لل ـGET فقط في التفكير المعماري

ETag يمكن أن تساعد أيضًا في منع lost updates عبر If-Match عند تعديل resource: client تعدل نسخة تعرف ETag الخاصة بها، والخادم يرفض التحديث إذا تغيرت resource في الوقت نفسه. هذا يربط caching مع optimistic concurrency ويمنع أن يكتب مستخدم فوق تعديل أحدث بدون أن يعرف.

هل تريد الاحتفاظ بالمقال أو إعادة استخدامه؟
مجتمع إيجي تاجعن المجتمع

شارك في تقييم ونقاش المقال

رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.

تفاعل مع المقالاختر التفاعل المناسب، ويمكنك تغيير رأيك لاحقًا.
قيّم جودة المقاللا توجد تقييمات بعد — كن أول من يقيّم.

نقاش القراء

النقاش

جارٍ تحميل التعليقات…

بعد هذه المادة

تابع القراءة

كل مواد #البرمجة وتطوير الويب
مرتبطة بنفس الوسوم04
  1. 02
  2. 03
  3. 04
اختيار القراء

الأكثر قراءة

الترتيب الكامل
  1. 01
يتجدد مع النشر

أحدث المواد

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06