ما هو HTTP/2؟
HTTP/2 مراجعة رئيسية لبروتوكول HTTP (موحّدة في RFC 7540)، تقدم التأطير الثنائي وتعدد الإرسال وضغط الترويسات ودفع الخادم لتحسين أداء الويب بدرجة كبيرة مقارنةً بـ HTTP/1.1.HTTP/2 مقابل HTTP/1.1
| الميزة | HTTP/1.1 | HTTP/2 |
|---|---|---|
| التنسيق | قائم على النص | ثنائي |
| الاتصالات | متعددة (6-8 لكل مضيف) | اتصال واحد متعدد الإرسال |
| معالجة الطلبات | متسلسلة | تدفقات متوازية |
| ضغط الترويسات | غير متاح | ضغط HPACK |
| دفع الخادم | غير متاح | مدعوم |
| تحديد الأولوية | غير متاح | أولويات للتدفقات |
كيف يعمل HTTP/2؟
HTTP/1.1 (Head-of-Line Blocking):
Connection 1: Request A ──────────► Response A
Connection 2: Request B ──────────► Response B
Connection 3: Request C ──────────► Response C
(Multiple connections, sequential per connection)
HTTP/2 (Multiplexing):
Single Connection:
├── Stream 1: Request A ──► Response A
├── Stream 2: Request B ──► Response B
├── Stream 3: Request C ──► Response C
└── All interleaved on same connection
الميزات الرئيسية
طبقة التأطير الثنائي
HTTP/2 Frame Structure:
┌─────────────────────────────────────┐
│ Length (24 bits) │
├─────────────────────────────────────┤
│ Type (8 bits) │ Flags (8 bits) │
├─────────────────────────────────────┤
│ Stream Identifier (32 bits) │
├─────────────────────────────────────┤
│ Frame Payload (variable) │
└─────────────────────────────────────┘
ضغط ترويسات HPACK
| السيناريو | ترويسات HTTP/1.1 | ترويسات HTTP/2 |
|---|---|---|
| الطلب الأول | ~800 بايت | ~800 بايت |
| الطلبات اللاحقة | ~800 بايت لكل طلب | ~20-50 بايت (مفهرسة) |
تحديد أولوية التدفقات
Priority Tree:
Root (connection)
├── CSS (weight: 256, high priority)
├── JavaScript (weight: 220)
└── Images (weight: 110, lower priority)
متطلبات الخادم
| الخادم | دعم HTTP/2 |
|---|---|
| nginx (خادم ويب) | 1.9.5+ (إصدار يدعم البروتوكول) |
| Apache (خادم ويب) | 2.4.17+ (وحدة HTTP/2) |
| Node.js (بيئة تشغيل) | 8.4+ (دعم أصلي للبروتوكول) |
| IIS (خادم ويب) | Windows 10/Server 2016+ (إصدار يدعم البروتوكول) |
فوائد الأداء
- زمن انتقال أقل: يلغي الاتصال الواحد تكلفة مصافحة TCP.
- ضغط أفضل: يخفض حجم الترويسات بنسبة 85-90% في الطلبات المتكررة.
- تحميل متوازٍ: تُحمّل جميع الموارد في الوقت نفسه.
- دفع الخادم: يرسل الموارد استباقياً قبل أن يطلبها المتصفح.
أفضل الممارسات
1. فعّل TLS: يتطلب HTTP/2 عملياً استخدام HTTPS (وتفرض المتصفحات ذلك).
2. قلل تقسيم النطاقات: تضر النطاقات المتعددة بالأداء الآن.
3. توقف عن دمج الملفات: يجعل تعدد الإرسال تجميع الملفات أقل ضرورة.
4. استخدم دفع الخادم بحذر: ادفع الموارد المهمة فقط.
5. راقب الأداء: تحقق من أن HTTP/2 يحسن حالة الاستخدام الخاصة بك.
يوفر HTTP/2 تحسينات كبيرة في الأداء لمعظم مواقع الويب من خلال استخدام اتصالات الشبكة بكفاءة أعلى.