HTTP/2 får plass inne i Gos SOCKS-tunnel
Klon standard-HTTP-transporten, velg SOCKS-proxyen og undersøk destinasjonsprotokollen som faktisk ble forhandlet.
En SOCKS-tunnel bærer en TCP-tilkobling. Go kan utføre TLS med destinasjonen gjennom den tunnelen og forhandle HTTP/2 der; SOCKS-serveren trenger ikke selv å snakke HTTP/2.
I et program som beholder Gos standard transport, klone konfigurasjonen og velg proxyen:
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,
}
Proxyen og destinasjonen forblir forskjellige verdier. Velg et SOCKS5-endepunkt fra SOCKS5-proxylisten for proxyverdien; HTTP/2 forhandles fortsatt med destinasjonen. Bruk client til å be om den ekte HTTPS-tjeneste-URL-en, og lukk deretter svarteksten gjennom applikasjonens normale livssyklus.
Standardtransporten støtter HTTP/2. Kloning beholder denne konfigurasjonen og lar proxyvalget endres. Typesjekken forutsetter at programmet ikke har erstattet http.DefaultTransport med en annen RoundTripper.
For en separat bygget transport, gjennomgå HTTP/2-konfigurasjonen, spesielt når du oppgir egendefinerte dial- eller TLS-kroker. Go eksponerer ForceAttemptHTTP2 og, i nyere utgivelser, eksplisitt Protocols-konfigurasjon for disse valgene.
Destinasjonen må fortsatt tilby HTTP/2 gjennom TLS-forhandling. Undersøk Proto- eller ProtoMajor-verdien til det vellykkede svaret for å se hva som ble brukt. En HTTPS-forespørsel som lykkes gjennom SOCKS beviser ikke i seg selv at den forhandlede protokollen var HTTP/2.