HTTP/2 يعمل داخل نفق SOCKS في Go
استنسخ ناقل HTTP القياسي، واختر وكيل SOCKS، وافحص بروتوكول الوجهة الذي جرى التفاوض عليه فعليًا.
ينقل نفق SOCKS اتصال TCP واحدًا. يستطيع Go إجراء TLS مع الوجهة عبر ذلك النفق والتفاوض على HTTP/2 هناك؛ ولا يحتاج خادم SOCKS نفسه إلى التحدث بـ HTTP/2.
في برنامج يحتفظ بالناقل الافتراضي القياسي في Go، استنسخ إعداداته واختر الوكيل:
import (
"net/http"
"net/url"
"time"
)
proxyURL := &url.URL{
Scheme: "socks5",
Host: "proxy.example:1080",
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
client := &http.Client{
Transport: transport,
Timeout: 30 * time.Second,
}
يبقى الوكيل والوجهة قيمتين مختلفتين. اختر نقطة نهاية SOCKS5 من قائمة وكلاء SOCKS5 لقيمة الوكيل؛ ولا يزال HTTP/2 يُتفاوض عليه مع الوجهة. استخدم client لطلب عنوان خدمة HTTPS الحقيقي، ثم أغلق جسم الاستجابة عبر دورة الحياة المعتادة للتطبيق.
يدعم الناقل الافتراضي القياسي HTTP/2. واستنساخه يحتفظ بذلك الإعداد مع السماح بتغيير اختيار الوكيل. ويفترض تحويل النوع أن البرنامج لم يستبدل http.DefaultTransport بـ RoundTripper آخر.
بالنسبة إلى ناقل منشأ بشكل منفصل، راجع إعداد HTTP/2 فيه، لا سيما عند تمرير خطافات dial أو TLS مخصصة. يكشف Go عن ForceAttemptHTTP2، وفي الإصدارات الأحدث، إعداد Protocols الصريح لتلك الخيارات.
ما زال على الوجهة أن تقدم HTTP/2 عبر تفاوض TLS. افحص قيمة Proto أو ProtoMajor في الاستجابة الناجحة لترى ما استُخدم. فنجاح طلب HTTPS عبر SOCKS لا يثبت بحد ذاته أن البروتوكول المتفاوض عليه كان HTTP/2.