المقدمة
النهارده هنقارن إصدارات الـ HTTP اللي مسؤولين عن توصيل الويب لينا كما نعرفه اليوم بأسهل طريقة هتشوفوها حول الانترنت, كوب الشاي ويلا بينا ^^
تشبيه من العالم الحقيقي
خلونا نفكر شوية في شركات التوصيل والبريد
- Network الطرق والكباري وعربيات التوصيل
- Client (المتصفح) الشخص اللي بيطلب أو يبعت الطرد
- Server (الخادم) الشركة أو المستودع اللي بيستقبل ويعالج الطلب
- HTTP Protocol القوانين اللي بتحكم طريقة كتابة العنوان، نوع الطرد، طريقة الرد
- TCP/UDP وسيلة النقل اللي بتوصل الطرود
- Data Packets الطرود نفسها اللي فيها أجزاء من البيانات
- Router / Switch مراكز البريد اللي بتنقل الطرود من منطقة للتانية
فيه 3 إصدارات حاليًا من ال HTTP لو خدنا نظرة سريعة عنهم في الجدول دا ومن ثم هنتكلم عن كل على حدة:
HTTP/1.1 "ساعي البريد التقليدي"
تخيل شركة التوصيل عندها ساعي بريد واحد (Connection واحد فقط). كل مرة يروح يسلم طرد، هيضطر يعمل رحلة كاملة وما يقدرش يشيل أكثر من طرد في الرحلة الواحدة. فلو عندك 10 طرود (requests)، لازم يعمل 10 رحلات ورا بعض ( يعني كل Request يتبعت ونستنى ال Response وبعدين نبعت اللي بعده وهكذا) أو يجيب سعاة كتير (multiple TCP connections).
المميزات
- بسيط وسهل الفهم.
- مدعوم في كل الأنظمة والمتصفحات.
- مثالي للتطبيقات الصغيرة أو legacy.
العيوب
- Head-of-Line Blocking: لو طلب اتأخر، باقي الطلبات تستنى.
- No Multiplexing: اتصال واحد = طلب واحد في المرة.
- Overhead عالي على الشبكة لأن ال Headers بتتكرر كل مرة.
- تحميل الصفحات الكبيرة بطيء خصوصًا لما يكون فيها ملفات كتير
HTTP/2 "شاحنة التوصيل (Multiplexing)"
الشركة قررت تحدث النظام وبقت تستخدم عربية واحدة (Connection واحد)، لكن جواها رفوف كثيرة (Streams).
يعني تقدر تبعت:
- طرد فيه /index.html
- طرد فيه /styles.css
- طرد فيه /script.js كلهم في نفس الرحلة لكن في أرفف منفصلة جوه نفس العربية.
بس فيه مشكلة صغيرة: لو طرد في أول العربية اتكسر أو اتأخر في التوصيل (TCP packet lost) → باقي الطرود في العربية ممكن يتأخروا كمان. (وده اللي بنسميه Head-of-Line Blocking على مستوى TCP.)
المميزات
- Multiplexing: إرسال عدة Requests في نفس ال Connection بدون انتظار لكل طلب مثل HTTP/1.1 دا بيوفر لنا سرعة التوصيل وكذلك استهلاك أقل لل Network Bandwidth.
- Header Compression (HPACK): بنقدر نضغط ال Headers كمان على عكس HTTP/1.1 اللي كنا بنقدر فيه نضغط البيانات فقط وتقليل حجم headers معناه استخدم أقل لل Network Bandwidth وسرعة أكبر.
- Server Push: السيرفر ممكن يبعث ملفات قبل ما العميل يطلبها.
- Binary Framing: التعامل مع frames بيخلي التحليل أسرع وأدق.
- Stream Prioritization: ممكن تتحكم في أولوية الملفات (مثلاً الـ CSS قبل الصور).
العيوب
- لسه بنعاني من TCP-level Head-of-Line blocking — لو packet واحدة اتاخرت، كل streams اللي بعدها تتأخر ودا لأننا في الأخر معتمدين علي ال TCP
- إعداد السيرفرات أعقد شوية (محتاج TLS في أغلب الحالات).
- Debugging أصعب لأن البيانات ثنائية مش نصية.
HTTP/3 (QUIC) — "درون التوصيل السريع"
- الشركة قررت تطور النظام أكثر وتستخدم Drones بدل العربية.كل طرد بيتبعت لوحده في الجو باستخدام بروتوكول UDPودا لأنه أسرع من ال TCP.كمان ال UDP مرن أكثر مع تغير الشبكة من 4G ل 3G مثلا في الموبايل أو الشبكات الضعيفة وبيدينا أداء ثابت وممتاز, ولكن عشان منفقدش مميزات ال TCP بنستخدم نظام (QUIC) عشان نعوض مميزات ال TCP من ال
- Reliability (إعادة إرسال البيانات المفقودة)
- Flow control
- Ordered delivery
- Congestion control
المميزات
- No Head-of-Line Blocking: ضياع packet واحدة مش بيوقف باقي الاتصالات.
- أسرع في الاتصال الأول: Handshake واحد فقط (0-RTT).
- Built-in Encryption: كل الاتصالات مشفرة بشكل دائم.
- أفضل أداء على الموبايل: لو عنوان IP اتغير أثناء الاتصال (زي Wi-Fi → 4G)، الSession بتكمل عادي.
- Reliability + Speed أعلى بشكل ملحوظ في الشبكات الضعيفة والغير مستقرة.
ال HTTP/3 بيمثل 15% من إجمالي مواقع الويب ولكنه مدعوم حاليًا في أغلب المتصفحات الحديثة زي (Chrome, Edge, Firefox). والشركات الكبيرة زي Cloudflare, Google, YouTube, Meta بيستخدموه بالفعل.
العيوب
- مش مدعوم بالكامل في كل البنى التحتية (بعض Load Balancers أو Firewalls ممكن متدعموش).
- أعقد في التنفيذ على مستوى ال Server .
- Debugging صعب لأن البيانات بتتغلف داخل QUIC مش TCP.
بالصورة رسم توضيحي بسيط لشكل الاتصال و الطلبات لكل إصدار:

في الختام
اتكلمنا النهارده عن إصدارات ال HTTP وايه يهمنا كمبرمجين منها وبالتأكيد استخدام كل نوع منهم بيتحدد بناءًا على حالة الاستخدام فلو بنتعامل مع Legacy System أو تطبيق داخلي بسيط ممكن نستخدم HTTP 1.1, لو هنشتغل مع Streaming ف HTTP3 بيدينا أداء أحسن وبالطبع لو بندور علي دعم كل المستخدمين ف HTTP2 هيكون الخيار الأمثل حاليًا وإن كان الانتقال ل HTTP3 حول الصناعة ماشي بسرعة كبيرة جدًا ليحل محل HTTP2.
Discussion