تكرار السؤال: …
الإجابة المختصرة
عالج HTTP/2 مشكلة حجب صدارة الطابور على مستوى التطبيق بدمج كل الطلبات في اتصال TCP واحد عبر Multiplexing، بينما حل HTTP/3 المشكلة على مستوى النقل بالكامل باستبدال TCP ببروتوكول QUIC فوق UDP.
الشرح
في HTTP/1.1، يتطلب كل طلب اتصالاً مستقلاً أو ينتظر انتهاء الطلب السابق (Head-of-Line Blocking). حل HTTP/2 ذلك بتقسيم البيانات إلى إطارات ثنائية (Binary Frames) ونقل تيارات متزامنة عبر نفس اتصال TCP وميزة ضغط الترويسات (HPACK). لكن عند ضياع حزمة TCP واحدة بسبب تشويش الشبكة، يتوقف بروتوكول TCP عن تمرير كافة التيارات الأخرى حتى تُعاد تلك الحزمة المفقودة! جاء HTTP/3 المبني على QUIC فوق UDP ليعالج ذلك: كل تيار بيانات مستقل تماماً، وضياع حزمة في تدفق لا يؤثر مطلقاً على باقي التيارات، مع دمج مصافحة TLS 1.3 في خطوة واحدة (0-RTT).
مثال بالكود
import httpx
# pip install "httpx[http2]" — many requests are multiplexed over ONE TCP connection
with httpx.Client(http2=True) as client:
response = client.get("https://www.google.com")
print(response.http_version) # "HTTP/2"
# HTTP/3 (QUIC over UDP) is advertised by the server in the Alt-Svc response header
print(response.headers.get("alt-svc")) # e.g. h3=":443"; ma=2592000
# Try it from the command line: curl --http3 -I https://cloudflare-quic.comأخطاء شائعة
- الاعتقاد بأن HTTP/3 غير آمن لأنه يستخدم UDP؛ بروتوكول QUIC يدمج تشفير TLS 1.3 إلزامياً في كل حزمة ولا يمكن تشغيله كنص خام غير مشفر.