Multipath TCP (MPTCP) لـ DiscourseHub و iOS Safari PWA خلف Caddy

متابعة: انقطاع تحرير منشور على iOS واستمرارية اتصال HTTP/3

لقد واجهت الآن مثالًا عمليًا لمشكلة استمرارية الاتصال التي كنت أسأل عنها.

في 21 أكتوبر 2026، بينما كنت أحرر منشورًا في مثيل Discourse الخاص بي على هاتف iPhone 16 Pro باستخدام تطبيق Safari PWA، تجمد شريط الحفظ الأزرق. كنت قد دوّنت للتو بعض ملاحظات المحاضرة الإضافية.

لم يعد بإمكانني الوصول إلى محرر النص، بما في ذلك عند النقر على شريط الحفظ الأزرق، لذا لم أستطع نسخ النص غير المحفوظ في مكان آخر.

بعد الانتظار لفترة أطول من المعتاد، عطّلت Wi-Fi يدويًا لمحاولة استخدام الشبكة الخلوية. لم يتغير الصفحة فورًا، لكن محاولات التنقل اللاحقة بدت وكأنها تتوقف أيضًا.

ثم فحصت سجلات Caddy وnginx وسجل تنقيحات المنشور.

في 12:20:08 بتوقيت BST:

  • سجّل Caddy طلب PUT /posts/70695 عبر HTTP/3 من اتصال Wi-Fi الجامعي، حيث تم استلام جميع بايتات جسم الطلب البالغ عددها 1,000 بايت، لكن الحالة كانت 0.

  • سجّل nginx الطلب المقابل كخطأ HTTP 400، دون أي وقت معالجة لمسار Discourse أو الخادم المضيف (upstream).

  • تلقى طلبان آخران من iPhone صادران من الشبكة الخلوية خطأ HTTP 400 في نفس الثانية.

  • لم يُسجَّل أي تنقيح ناجح للمنشور في ذلك الوقت.

نجح تحرير لاحق في الساعة 12:20:55 بتوقيت BST، لكن النص المدوّن كان مفقودًا.

كما كان هناك حفظ تلقائي ناجح لمسودة Discourse في الساعة 12:19:44 بتوقيت BST، رغم أنني لا أستطيع تحديد ما إذا كانت تحتوي على النص المفقود.

أتفهم أن تعطيل Wi-Fi يدويًا قد يكون قاطعًا للطلبات المعلّقة. ومع ذلك، كانت عملية الحفظ الأصلية متوقفة بالفعل قبل تغيير اتصال الشبكة.

هذا يثير سؤالين يتعلقان بمنشوري الأصلي:

  1. ترحيل اتصال QUIC: هل هناك طريقة موصى بها لتحديد ما إذا حاول متصفح iOS ترحيل اتصال HTTP/3 الحالي، بدلاً من إنشاء اتصال جديد أو التخلي عن الطلبات المعلّقة؟

  2. استعادة محرر Discourse: إذا أصبح طلب تحرير المنشور متوقفًا أو انقطع، فهل يُتوقع أن يبقى المحرر غير قابل للوصول خلف حالة “الحفظ”؟ هل يوجد آلية مهلة زمنية أو إعادة محاولة أو استعادة يجب أن تحافظ على النص غير المحفوظ؟

أنا مهتم بشكل خاص بالسؤال الثاني لأنني لم أتمكن من العودة إلى المحرر لنسخ عملي قبل محاولة استعادة الاتصال.

لم أجري أي تغييرات على إعدادات Caddy أو nginx أو HTTP/3 نتيجة لهذا الحادث، لأن الأدلة المتاحة لا تزال لا تحدد ما الذي تسبب في توقف عملية الحفظ الأولية.