أشد أنواع الأعطال خفيةً: حيث يُرجع الخادم رمز الحالة 200 باستمرار، بينما تستمر الصفحة في إظهار أخطاء.
نصوص الخلفية لدينا بسبب nginx expires 7d تم تخزين النص البرمجي مؤقتًا في المتصفح لمدة سبعة أيام، وبعد تحديثه استمر المتصفح في تشغيل الإصدار القديم، مما تسبب في تعطل العرض عند معالجة تنسيق البيانات الجديد، بينما أبلغ الكود عن جميع الاستثناءات على أنها «فشل قراءة الخادم» — وبقي البحث مستمرًا في الخادم لفترة طويلة، رغم أن الخادم كان يعمل بشكل طبيعي طوال الوقت. وتولِّد هذه الأداة مجموعةً متكاملةً من سياسات التخزين المؤقت التي لا تتعارض مع بعضها البعض حسب نوع الملف، بالإضافة إلى نص فحص رؤوس الاستجابة.
—
—
| الظاهرة | الجاني الحقيقي | كيفية التأكيد |
|---|---|---|
| بعد تعديل ملفات CSS/JS، لا تبدو التغييرات «مُطبَّقة» على الإصدار الحي | ذاكرة التخزين المؤقت الطويلة + الإشارات دون رقم إصدار. | curl -I راجع قيمة max-age؛ وأعد الإرسال بعد تغيير رقم الإصدار |
| سجلات الخادم تُظهر رمز الحالة 200 بالكامل، ومع ذلك تظهر الصفحة رسالة «لا يمكن قراءة البيانات» | يتسبب تشغيل المتصفح لنص برمجي قديم مع عرض تنسيق بيانات جديد في تعطل التصيير، وتُبلَّغ هذه المشكلة كعطل شبكي زائف بسبب استخدام عبارة catch. | افحص سطر الخطأ في وحدة التحكم (Console)؛ ثم غيّر إعداد التخزين المؤقت إلى no-cache للنَّص البرمجي، وبعدها اضغط Ctrl+F5. |
| بعض الصفحات حديثة وبعضها قديم | يتم استدعاء نفس ملف CSS من قِبل عدة صفحات، وقد تم تحديث رقم الإصدار فقط في بعض هذه الصفحات | ابحث عن اسم هذا المورد عبر الموقع بالكامل، وارفع رقم الإصدار دفعةً واحدة. |
| يستغرق تفعيل التغييرات في الخلفية عدة أيامٍ قبل أن تصبح ساريةً. | تم تعيين صفحات الخلفية لتستخدم تخزينًا مؤقتًا طويل الأمد | لا تخزن أبدًا (no-store) في الخلفية بشكل موحد. |
| البيانات لا تزال أقدم نسخة متوفرة | تم تخزين واجهات برمجة التطبيقات (API) في ذاكرة التخزين المؤقت لـ CDN أو المتصفح | واجهة برمجية (API) بوضع no-store؛ وطلب fetch مع معلمة تحتوي على الطابع الزمني |
| أداة curl المحلية تعمل بشكل طبيعي، لكن متصفح المستخدم لا يعمل | طبقة CDN ما زالت تحتفظ بإصدار قديم في ذاكرة التخزين المؤقت. | استخدم -H 'Cache-Control: no-cache' قارن، ثم أفرغ الذاكرة المؤقتة من لوحة تحكم CDN. |
١ · رمز الاستجابة من الخادم هو 200، لكن الصفحة تُظهر خطأً.النص البرمجي في الخلفية تم expires 7d التخزين المؤقت: بعد التحديث، ما زال المتصفح يُنفّذ البرامج النصية القديمة، والتي تنهار عند تحليل تنسيق البيانات الجديد، بينما يُبلغ blok catch أيضًا عن استثناء العرض كـ"عدم قدرة الخادم على القراءة"، مما يُضلّ اتجاه التشخيص تمامًا.
٢ · تعديل القاعدة: تعيين no-cache للنصوص البرمجية الخاصة بالخلفية بشكل منفصل.location = /assets/js/admin.js { add_header Cache-Control "no-cache"; }— تطابق الموقع الدقيق (exact match) يتفوّق على قواعد التخزين المؤقت الطويلة للوسائط الثابتة المبنية على التعبيرات النمطية.
3 · يجب توجيه رسائل الخطأ إلى مسارات مختلفة."البيانات وصلت لكن العرض فشل" و"فشل طلب الشبكة" يجب الإبلاغ عنهما كجملتين منفصلتين؛ وإلا فإن اتجاه التشخيص سيُضلّ لمدة يومين.
٤ · قاعدة بسيطة واحدة تكفي:يجب أن يرافق التخزين المؤقت الطويل رقم إصدار؛ ولا يُسمح أبدًا بالتخزين المؤقت الطويل للعناصر غير المزودة برقم إصدار.