الخلاصة

  • أعطى RFC 7540 خادم HTTP/2 وسيلة للإعلان عن مورد متوقع وإرساله باستخدام PUSH_PROMISE قبل أن يطلبه المتصفح. يستطيع العميل تعطيل الدفع أو رفض تدفق بعينه.
  • أبقى RFC 9113 الآلية في يونيو 2022 وشرح أثر التنبؤ الخاطئ على الأداء. ثم وثقت مذكرة Chrome 106 إزالة القدرة على استلام تلك التدفقات وحفظها واستخدامها.

الخادم يسبق السؤال

تضم صفحة HTML رابطًا إلى ملف تنسيق. يرى الخادم الرابط قبل أن يقرأ المتصفح الصفحة، فيقرر إرسال الملف فورًا ليوفر رحلة طلب إضافية. حول معيار HTTP/2 الصادر سنة 2015 هذه الفكرة إلى إجراء محدد: يعلن إطار PUSH_PROMISE طلبًا صاغه الخادم نيابة عن العميل، ثم يأتي الرد عبر تدفق منفصل.

قيّد المعيار هذا السبق. يجب أن يرتبط الدفع بطلب حقيقي بدأه العميل، وأن تكون العملية آمنة وقابلة للتخزين المؤقت، وأن يملك الخادم سلطة الرد عن المصدر. يستطيع المتصفح إرسال SETTINGS_ENABLE_PUSH=0 أو إلغاء تدفق لا يريده. حصل الخادم على فرصة لتخمين الخطوة التالية؛ لم يحصل على علم بما يحتاجه المتصفح فعلاً.

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

المعيار يشرح عيب ميزته

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

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

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

الإشارة تبقى، والطرد يعود

ذكر Chrome 103 Early Hints والتحميل المسبق ضمن البدائل. ترسل التلميحات إشارة إلى مورد متوقع، ويقرر المتصفح هل يطلبه، مستعينًا بما لديه في الذاكرة المؤقتة. تلك الآلية لها تاريخ آخر. الفارق الذي يفسر نهاية Server Push هنا هو أن الرد الكامل كان يصل بمبادرة من الخادم؛ وكان على العميل أن يعالجه حتى عندما أخطأ التوقع.

تسلسل الوقائع واضح: منح HTTP/2 الخادم حق التقديم في 2015، وشرح تنقيحه في 2022 لماذا قد يصبح التقديم عبئًا، ثم أوقف Chrome الاستلام. بقيت الميزة مكتوبة في البروتوكول، وفقدت مكانها في برنامج متصفح حقيقي.