المقدمة

النهارده هنقارن إصدارات الـ HTTP  اللي مسؤولين عن توصيل الويب لينا كما نعرفه اليوم بأسهل طريقة هتشوفوها حول الانترنت, كوب الشاي ويلا بينا ^^


تشبيه من العالم الحقيقي

خلونا نفكر شوية في شركات التوصيل والبريد 

  • Network          الطرق والكباري وعربيات التوصيل
  • Client (المتصفح) الشخص اللي بيطلب أو يبعت الطرد
  • Server (الخادم) الشركة أو المستودع اللي بيستقبل ويعالج الطلب
  • HTTP Protocol القوانين اللي بتحكم طريقة كتابة العنوان، نوع الطرد، طريقة الرد
  • TCP/UDP وسيلة النقل اللي بتوصل الطرود
  • Data Packets الطرود نفسها اللي فيها أجزاء من البيانات
  • Router / Switch مراكز البريد اللي بتنقل الطرود من منطقة للتانية
💡
فلما نتكلم عن الـ HTTP ما هو إلا قوانين تنظم طريقة إرسال واستلام البريد أو الطرود و الإصدارات المختلفة ما هي إلا تحسينات على الطريقة دي عشان نخليها أكفأ وأسهل وأسرع.

فيه 3 إصدارات حاليًا من ال HTTP لو خدنا نظرة سريعة عنهم في الجدول دا ومن ثم هنتكلم عن كل على حدة:

الإصدار

سنة الإصدار

البروتوكول الأساسي

الميزة الكبرى

HTTP/1.1

1997

TCP

Keep-Alive + Pipelining

HTTP/2

2015

TCP

Multiplexing + Binary framing

HTTP/3

2022 (قياسي رسمي)

QUIC (UDP)

أسرع، أقل latency، مقاوم لانقطاع الاتصال


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 قبل الصور).
💡
ال HTTP/2 هو المستخدم في 60% من مواقع الويب وده لأنه بيضاعف الأداء في المواقع اللي فيها Multiple Resources وبيدينا نتيجة أسرع وأكفأ من HTTP1.1

العيوب

  • لسه بنعاني من 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 Versions Explained
HTTP Versions Explained

في الختام

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


المصادر