مستوى المقال: متوسط — مفيد لمطوّر فول-ستاك أو DevOps عنده تجربة مع NGINX و TLS، وعارف الفرق بين TCP و UDP بشكل مبدئي. مدّة القراءة المتوقعة: 9 دقائق.
لو موقعك بيخدم زائرين على شبكة موبايل ضعيفة ولاحظت إن LCP بيعدي 4 ثوانٍ مع إن السيرفر بيرد بسرعة، المشكلة مش في السيرفر ولا في الكود. المشكلة في طبقة النقل اللي مكوّن الموقع شغّال فوقها. تفعيل HTTP/3 على NGINX 1.25+ بيقطع زمن أول تحميل بنسبة تتراوح بين 18% و 35% على شبكات 4G ضعيفة وWi-Fi مزدحم، بدون لمس سطر واحد من كود التطبيق. في المقال ده هتفهم ليه TCP بيخنق الأداء على الموبايل، إيه اللي بيفرّق QUIC عن TCP بالظبط، وإزاي تشغّل HTTP/3 على NGINX خطوة بخطوة مع قياس قبل وبعد.
HTTP/3 و QUIC للمستوى المتوسط: ازاي تخفّض زمن تحميل الموقع 35% على الموبايل
المشكلة باختصار: TCP اتولد قبل الموبايل بـ 30 سنة
TCP اتصمم سنة 1981 لشبكات سلكية ثابتة. الافتراض الأساسي بتاعه: الحزمة لو ضاعت، ده معناه ازدحام في الشبكة. على الموبايل، الحزمة بتضيع لأن الإشارة بتتغير وانت ماشي، أو لأن البرج بيحوّلك من 4G لـ 5G والـ IP بيتغير. TCP مش فاهم الفرق ده.
الأخطر من كده مفهوم اسمه Head-of-Line Blocking. خلّينا نشرحه بمثال:
مثال للمبتدئ: طابور الكاشير في السوبرماركت
تخيّل سوبرماركت فيه كاشير واحد بس. أنت رقم 5 في الطابور. لو الزبون رقم 3 معاهوش فلوس وراح يدوّر على ATM، أنت ماتقدرش تدفع وتمشي حتى لو طلباتك جاهزة. لازم تستنى يرجع ويخلّص. هو ده TCP بالظبط: لو حزمة في النص ضاعت، الحزم اللي بعدها — حتى لو وصلت سليمة — بتتحبس في الـ buffer لحد ما الحزمة الناقصة ترجع.
QUIC قسّم الكاشير الواحد لـ 4 كاشيرات (streams). لو الزبون رقم 3 وقف على كاشير، الكاشيرات التانية شغّالة عادي. كل stream عنده طابور لوحده.
التعريف العلمي الدقيق
QUIC (تُنطق "كويك") هو بروتوكول نقل قياسي مُعرَّف في RFC 9000، بيشتغل فوق UDP بدل TCP. HTTP/3 هو إعادة تصميم HTTP عشان يستخدم QUIC، ومُعرَّف في RFC 9114. الفرق الجوهري:
- Multiplexing حقيقي: كل HTTP request له stream مستقل. سقوط حزمة في stream X مش بيأثّر على stream Y. في HTTP/2 على TCP، الـ multiplexing وهمي لأن TCP تحت كله طابور واحد.
- Handshake في 1-RTT بدل 3: QUIC بيدمج TCP handshake (3 خطوات) مع TLS 1.3 handshake (3 خطوات) في تبادل واحد. على الزيارات المتكررة، QUIC بيدعم 0-RTT — يعني الـ HTTP request بيتبعت في نفس أول حزمة مع الـ key exchange.
- Connection Migration: الاتصال متربط بـ Connection ID مش بـ IP/Port. لمّا الموبايل يبدّل من Wi-Fi لـ 4G، الـ session بيكمل من غير ما يعمل reconnect.
- مفيش QUIC بدون TLS 1.3. ده بيغلق ثغرات interception على مستوى الـ middleboxes.