HTTP/3 (JEP 517)
دعم HTTP/3 في HttpClient (Java 26) HTTP/3 (JEP 517)
منذ Java 26 (JEP 517)، يمكن لـ HttpClient إرسال طلبات عبر HTTP/3 اختياريًا — بروتوكول يعمل فوق QUIC بدل TCP، ويحل مشكلة head-of-line blocking ويدعم هجرة الاتصال بين الشبكات.
Java 26 (إصدار غير LTS، صدر في مارس 2026) أضافت لـ HttpClient دعمًا لبروتوكول HTTP/3 عبر JEP 517. HTTP/3 يعمل فوق QUIC — بروتوكول نقل حديث مبني على UDP بدل TCP — وله فائدتان عمليتان رئيسيتان: كل مجرى بيانات (stream) مستقل فلا يتأثر الجميع بفقدان حزمة واحدة (على عكس HTTP/2)، والاتصال يُعرَّف برقم خاص بدل عنوان IP فلا ينقطع عند تغيير الشبكة (هجرة الاتصال).
HTTP/2 يبقى البروتوكول الافتراضي — التفعيل اختياري صراحةً عبر .version(HttpClient.Version.HTTP_3) على العميل أو الطلب. للتحكم بطريقة الاكتشاف عند عدم التأكد من دعم الخادم، يوفّر HttpOption.H3_DISCOVERY قيمًا من Http3DiscoveryMode: ANY (الافتراضي، يحاول القنوات المتاحة ويعتمد الأسرع)، ALT_SVC (يبدأ بـ HTTP/2 وينتقل لاحقًا فقط إذا أعلن الخادم دعمه)، وHTTP_3_URI_ONLY (HTTP/3 حصرًا، يفشل بدون رجوع لبروتوكول أقدم).
الصياغة
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_3)
.build();📄 مثال
import java.net.http.HttpOption;
import java.net.http.HttpOption.Http3DiscoveryMode;
HttpRequest request = HttpRequest.newBuilder(URI.create("https://example.com"))
.version(HttpClient.Version.HTTP_3)
.setOption(HttpOption.H3_DISCOVERY, Http3DiscoveryMode.HTTP_3_URI_ONLY)
.GET()
.build();أهم النقاط
| العنصر | الوظيفة |
|---|---|
| HttpClient.Version.HTTP_3 | قيمة تُمرَّر لـ .version() على العميل أو الطلب لتفضيل HTTP/3 |
| HttpOption.H3_DISCOVERY | خيار يُمرَّر لـ setOption() للتحكم بطريقة اكتشاف اتصال HTTP/3 |
| Http3DiscoveryMode.ANY | الوضع الافتراضي — يحاول القنوات المتاحة (QUIC وTCP) ويعتمد الأسرع |
| Http3DiscoveryMode.ALT_SVC | يرسل الطلب الأول عبر HTTP/2، وينتقل لـ HTTP/3 فقط إذا أعلن الخادم دعمه |
| Http3DiscoveryMode.HTTP_3_URI_ONLY | HTTP/3 حصرًا — يفشل الطلب إن لم يستجب الخادم به |
💡 نصائح عملية
- لا حاجة لتغيير أي كود قائم — HTTP/2 يبقى الافتراضي حتى تطلب HTTP/3 صراحة
- استخدم HTTP_3_URI_ONLY فقط عند التأكد الكامل من دعم الخادم لـ HTTP/3
⚠️ أخطاء شائعة
- افتراض أن HTTP/3 يصبح تلقائيًا بمجرد الترقية لـ Java 26 — يحتاج تفعيلًا صريحًا عبر .version()
- استخدام HTTP_3_URI_ONLY مع خادم غير مؤكد الدعم — يفشل الطلب بدل الرجوع لبروتوكول أقدم
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVA الكامل بالعربي.