HTTP/2 passt an den SOCKS-Tunnel vu Go
Klonéiert den Standard-HTTP-Transport, wielt de SOCKS-Proxy aus a kuckt de Zilprotokoll un, dee tatsächlech ausgehandelt gouf.
En SOCKS-Tunnel transportéiert eng TCP-Verbindung. Go kann TLS mam Zil duerch dësen Tunnel maachen an do HTTP/2 ausverhandelen; de SOCKS-Server muss selwer net HTTP/2 schwätzen.
An engem Programm, dat den Standard-Standardtransport vu Go behält, klonéiert seng Konfiguratioun a wielt de Proxy aus:
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,
}
De Proxy an d'Zil bleiwen ënnerschiddlech Wäerter. Wielt en SOCKS5-Endpunkt aus der SOCKS5-Proxy-Lëscht fir de Proxywäert; HTTP/2 gëtt nach ëmmer mam Zil ausverhandelt. Benotzt client fir déi richteg HTTPS-Service-URL unzefroen, a schléisst dann de Äntwertkierper iwwer den normale Liewenszyklus vun der Applikatioun.
Den Standard-Standardtransport ënnerstëtzt HTTP/2. D'Klonen hält dës Konfiguratioun bäi an erlaabt et, d'Proxywiel ze änneren. D'Typ-Assertion geet dovun aus, datt d'Programm http.DefaultTransport net duerch en aneren RoundTripper ersat huet.
Fir en separat gebaute Transport, iwwerpréift seng HTTP/2-Konfiguratioun, besonnesch wann Dir eegen dial- oder TLS-Hooks ubitt. Go stellt ForceAttemptHTTP2 an, an neien Verëffentlechungen, eng explizit Protocols-Konfiguratioun fir dës Wieler bereet.
D'Zil muss nach ëmmer HTTP/2 iwwer TLS-Ausverhandlung ubidden. Kuckt de Proto- oder ProtoMajor-Wäert vun der erfollegräicher Äntwert un, fir ze gesinn wat benotzt gouf. Eng HTTPS-Ufro, déi duerch SOCKS geléngt, beweist net vu sech aus, datt den ausgehandelten Protokoll HTTP/2 war.