HTTP/2 Go के SOCKS टनल के भीतर फिट बैठता है
मानक 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 सेवा URL का अनुरोध करने के लिए करें, फिर ऐप्लिकेशन के सामान्य जीवनचक्र के ज़रिए रिस्पॉन्स बॉडी बंद करें।
मानक डिफ़ॉल्ट ट्रांसपोर्ट HTTP/2 का समर्थन करता है। इसे क्लोन करने से वह कॉन्फ़िगरेशन बना रहता है और प्रॉक्सी का चुनाव बदला जा सकता है। टाइप जाँच मानती है कि प्रोग्राम ने http.DefaultTransport को किसी अन्य RoundTripper से नहीं बदला है।
अलग से बनाए गए ट्रांसपोर्ट के लिए, उसका HTTP/2 कॉन्फ़िगरेशन देखें, विशेष रूप से कस्टम dial या TLS हुक देते समय। Go ForceAttemptHTTP2 और नए रिलीज़ में उन चुनावों के लिए स्पष्ट Protocols कॉन्फ़िगरेशन उपलब्ध कराता है।
गंतव्य को अभी भी TLS बातचीत के ज़रिए HTTP/2 देना होगा। यह देखने के लिए कि क्या इस्तेमाल हुआ, सफल रिस्पॉन्स का Proto या ProtoMajor मान जाँचें। SOCKS के ज़रिए सफल HTTPS अनुरोध अपने आप यह सिद्ध नहीं करता कि तय किया गया प्रोटोकॉल HTTP/2 था।