لا تزال علامة التبويب تعرض لوحة المعلومات من قبل أن يموت النفق. تتجمد أرقام الحالة، ويستمر مؤشر صغير في الدوران، ولا يزال شريط العنوان يحمل التطبيق الذي فتحته قبل ساعة. لم تلمس شيئًا بعد الانقطاع، ومع ذلك قد تكون الصفحة لا تزال تحاول الوصول إلى خادمها وفق جدولها الخاص. هذا هو الجزء الذي يفوته الناس: الصفحة التي هي مجرد ظاهرة والصفحة التي لا تزال ترسل طلبات تبدوان متطابقتين من الخارج، وواحدة فقط منهما تظهر في سجل الشبكة.

عمل تبدأه الصفحة بدونك

أربع آليات تُبقي المستند المحمّل مشغولًا. يمكن لمؤقت متكرر أن يعيد تشغيل استدعاء حالة كل بضع ثوانٍ. يمكن لطلب fetch أن ينطلق عندما تصبح علامة التبويب ظاهرة مجددًا بعد أن تعود إليها. يمكن لقناة حية مبنية على WebSocket أو أحداث يرسلها الخادم أن تحاول إعادة الاتصال وفق جدول تراجعها الخاص. يمكن لعامل خدمة سجّلته الموقع أن يستيقظ من أجل مزامنة موضوعة في قائمة الانتظار حتى عندما لا تكون أي علامة تبويب أمامك.

لا يحتاج أي منها إلى نقرة، ولا يعيد أي منها تحميل المستند. يبقى شريط العنوان وموضع التمرير والقيم المعروضة كلها حيث كانت. الذي يتغير هو جانب الشبكة فقط: كل محاولة جديدة قرار جديد يُتخذ في اللحظة التي تبدأ فيها.

هذا التمييز مهم لأن الصفحة الظاهرة مخزنة محليًا. البكسلات المرسومة بالفعل لا تقول شيئًا عن نجاح الطلب التالي. مخطط متجمد مع مؤشر دوار هو المظهر العادي لصفحة تفشل طلباتها الآن. قراءة الشاشة تخبرك بما قاله الخادم قبل دقائق، لا بما يفعله المتصفح الآن.

لماذا لا يحتفظ تحميل الصفحة السابق بمسار

لا شيء في تحميل الصفحة يربط المستند بالنفق. يُحلّ التوجيه لكل حزمة، عند وقت الإرسال، من الجدول الموجود عندما تغادر الحزمة. عندما يختفي واجهة النفق، لم يعد ذلك البحث يطابق مسار النفق. إما أن يسقط إلى المحول الفيزيائي أو لا يجد شيئًا على الإطلاق، حسب ما تركه العميل خلفه.

الاستدعاءات المتكررة مهام مجدولة عادية. يصف قسم المؤقتات في معيار HTML كيفية وضعها في قائمة الانتظار ويعامل الفاصل الزمني كحد أدنى للتأخير لا كوعد بإيقاع دقيق، لذا يمكن لعلامة تبويب خلفية أن تستقصي أقل بكثير مما يطلبه كودها. محاولات أقل لا تعني نفس الشيء مثل لا محاولات، وإعادة علامة تبويب إلى المقدمة لحظة شائعة لانفجار منها.

أين تستقر سياسة الفشل

يُقيَّم حظر العميل عندما تُحاول إقامة اتصال، لا عندما جُلبت الصفحة. إذا كان الوصول العادي ما زال مسموحًا، فقد تخرج إعادة المحاولة عبر الرابط الفيزيائي مكشوفة. إذا كانت السياسة تحتجز ذلك المرور حتى يعود النفق، تفشل المحاولة عند وقت الاتصال وتعرض الصفحة خطأً قد تعيد محاولته بعد بضع ثوانٍ.

تفصيلان يحددان أيًّا من تلك ستحصل عليه. الأول هو نطاق التنفيذ الذي يدعمه العميل: حظر على مستوى الجهاز بأكمله، أو حظر محدود بمحول النفق، أو مجموعة قواعد مع استثناءات. الثاني هو ما إذا كانت الوجهة تقع داخل استثناء أضفته سابقًا لطابعة محلية أو بوابة أسيرة أو خدمة بث.

تشفير مستوى التطبيق لا يغير أيًا من هذا. يحمي HTTPS البايتات بين المتصفح والخادم؛ ولا يقول شيئًا عن الواجهة التي تحملها. يمكن أن تكون الصفحة مشفرة تمامًا ومع ذلك تخرج عبر المسار الخطأ، وهذا بالضبط ما يسمح به الحظر الضيق.

فحص مضبوط بصفحة يمكن التخلص منها

استخدم مضيفًا تتحكم به وصفحة لا تفعل شيئًا سوى استدعائه، حتى لا تكون هناك بيانات حقيقية في اللعبة. من طرفية، خذ عينة من المسار قبل الانقطاع وبعده:

curl -sS --max-time 5 -o /dev/null -w '%{http_code} %{remote_ip}\n' https://probe.example.net/ping

شغّله والنفق مرفوع، ثم أنزل النفق وشغّله مرة أخرى. رد من عنوان عام والنفق منخفض يخبرك أن المسار المباشر مفتوح. انتهاء المهلة أو رفض الاتصال يخبرك أن السياسة ممسكة. كرر مرة أخرى بعد أن يعيد العميل الاتصال، حتى ترى مسار النفق يعود بدلًا من افتراض أنه عاد.

في المتصفح، تفصل لوحة الشبكة بين السؤالين. صفِّ إلى Fetch/XHR، ثم اقرأ عمود المُبدئ: إدخال بدأه مؤقت أو نص برمجي، دون تسجيل تنقل قبله، هو محاولة خلفية لا إعادة تحميل. قارن وقت بدايته باللحظة التي سقط فيها النفق. إذا كان الإدخال ما زال معلقًا والنفق ذهب، فالطلب ينتظر مسارًا لم يعد موجودًا.

الأدلة من جهة الخادم أقوى من أي شيء يعرضه المتصفح. سجل طلبات بطابع زمني وعنوان مصدر يثبت أن الحزمة وصلت. يمكن أن تحمل إدخالات المتصفح ملفات تعريف ارتباط ورموزًا وعناوين URL كاملة، لذا احتفظ فقط بالحقول التي يحتاجها سؤالك واحجب الباقي قبل لصقه في أي مكان.

ماذا تفعل بالجواب

إذا استمرت المحاولات الخلفية في النجاح والنفق منخفض، فالحظر أضيق مما افترضت، وتلك الفجوة تستحق الإغلاق قبل أن تثق بالعميل في أعمال حساسة. إذا فشلت، فالصياسة تؤدي عملها والصفحة المتجمدة تجميلية. في كلتا الحالتين، إغلاق علامة تبويب واحدة ليس تحكمًا على مستوى الجهاز: علامات التبويب الأخرى والمتصفحات الأخرى والتطبيقات الأخرى كلها تجدول عملها بنفسها.

خطوات تالية تستحق القيام بها: اسرد الاستثناءات التي أضفتها ولماذا، وتأكد مما إذا كان العميل يحظر حركة مرور النفق فقط أم كل حركة المرور، وراقب طلبًا خلفيًا واحدًا من البداية إلى النهاية مع إبقاء سجل الخادم مفتوحًا. تلك الإجابات الثلاث تغطي معظم ما يحتويه تقرير يقول «انقطع VPN وما زال شيء ما متصلًا».

مقالات ذات صلة