مستوى المقال: متوسط — يفترض إنك تعرف الفرق بين HTTP/1.1 و HTTP/2، عندك فكرة عامة عن TLS handshake، وفاهم إن CDN مش حل سحري لكل شيء. لو لسه مبتدئ في الشبكات، الأمثلة هنا هتساعدك تبني صورة ذهنية أولاً قبل ما تدخل في التفاصيل.
لو فتحت موقعك على موبايل بشبكة 4G مهتزّة في طريق سفر ولقيت LCP وصل 3.4 ثانية رغم إن CDN شغّال و HTTP/2 مفعّل، المشكلة مش في حجم الـ bundle ولا في خادم بطيء. المشكلة في TCP نفسه — البروتوكول اللي بيشتغل تحت كل ده. HTTP/3 على QUIC بيحلّ المشكلة دي بشكل جذري وبينزّل أول byte من 820 مللي ثانية لـ 240 مللي ثانية على نفس الشبكة.
HTTP/3 و QUIC: إزاي تشيل ضريبة TCP من أول طلب على موقعك
المشكلة باختصار
HTTP/2 رغم إنه multiplexed وبيرسل streams متعددة على connection واحد، لسه شغّال فوق TCP. ودي مشكلة معروفة اسمها "Head-of-Line Blocking على مستوى الـ packets". لو packet واحد ضاع في الطريق على شبكة موبايل، TCP بيوقف كل الـ streams لحد ما الـ packet ده يترجع. على شبكة 4G مهتزّة بـ packet loss بين 2% و 5%، التأخير ده بيتراكم في صورة كوارث ملحوظة.
كمان TCP مع TLS 1.3 بياخد round-trips كاملة قبل ما تبدأ ترسل أول byte فعلي من المحتوى:
- SYN / SYN-ACK / ACK — لفتح TCP connection (round-trip كامل).
- TLS ClientHello / ServerHello — لتبادل المفاتيح (round-trip تاني).
- أول HTTP request بعد ما الاتصال المشفّر اكتمل.
على شبكة 4G بـ RTT 180 مللي ثانية، الـ overhead ده بيوصل 540ms قبل ما الخادم يفكّر يرسل أول حرف HTML.
المفهوم بمثال بسيط جداً أولاً
تخيّل إنك واقف في كافيه وعايز تطلب 6 أصناف لشلّتك:
- مع HTTP/1.1: تقف في الصف 6 مرات منفصلة، كل مرة تطلب صنف واحد، وتنتظر دوره من جديد. كارثة وقت.
- مع HTTP/2: تقف مرة واحدة، تقول للكاشير "عايز الـ 6 أصناف سوا". الكاشير يبدأ يحضّرهم بالتوازي. أحسن بكتير. بس لو الباريستا اتلخبط في صنف واحد (مثلاً نسي اللاتيه على النار)، الـ 5 الباقيين بيستنوا معاه على نفس الكاونتر. ده هو Head-of-Line Blocking.
- مع HTTP/3 على QUIC: نفس الباريستا، بس بدل كاونتر واحد، عنده 6 طاولات تحضير منفصلة. لو طلب فيه مشكلة، الباقي بيتسلّم على الفور بدون انتظار.
المثال ده مبسّط بقصد، لكنه يحفظ الفكرة الجوهرية في دماغك: HTTP/3 بيفصل الـ streams على مستوى البروتوكول نفسه، مش بس على مستوى التطبيق.
التعريف العلمي بدقة
QUIC (Quick UDP Internet Connections) هو بروتوكول طبقة نقل بُني فوق UDP بدل TCP، وتم توحيده رسمياً في RFC 9000 (مايو 2021) بعد ما طوّرته Google من 2012 وشغّلته على ترافيكها لسنين. HTTP/3 هو ربط HTTP عليه، وموحّد في RFC 9114 (يونيو 2022). الفكرة الجوهرية في 3 خصائص:
- 1-RTT و 0-RTT handshake: التشفير (TLS 1.3) مدمج في البروتوكول نفسه مش طبقة منفصلة فوقه. ده بيخلّي الـ handshake round-trip واحد فقط للجلسة الأولى، وصفر round-trips لو المستخدم رجع لنفس الموقع خلال آخر فترة قصيرة.