HTTP/2 passar inni í SOCKS-göngum Go
Klónaðu staðlaða HTTP-flutninginn, veldu SOCKS-milliliðinn og skoðaðu áfangastaðarprotokollina sem raunverulega var samið um.
SOCKS-göng ber TCP-tengingu. Go get framkvæmt TLS við áfangastaðinn í gegnum göngin og samið um HTTP/2 þar; SOCKS-þjóninum þarf ekki sjálfum að tala HTTP/2.
Í forriti sem heldur staðlaða sjálfgefna flutningnum Go, klónaðu stillingarnar og veldu milliliðinn:
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,
}
Milliliðurinn og áfangastaðurinn eru áfram ólík gildi. Veldu SOCKS5-endapunkt úr SOCKS5-milliliðalistanum fyrir milliliðagildið; HTTP/2 er enn samið um við áfangastaðinn. Notaðu client til að biðja um raunverulegt URL HTTPS-þjónustunnar og lokaðu síðan svarshlutnum í gegnum venjulegan lífsferil forritsins.
Staðlaði sjálfgefni flutningurinn styður HTTP/2. Klónun hans varðveitir þessa stillingu og leyfir samt að breyta milliliðavali. Tegundarfullyrðingin gerir ráð fyrir að forritið hafi ekki skipt http.DefaultTransport út fyrir annan RoundTripper.
Fyrir sérsmíðaðan flutning skaltu fara yfir HTTP/2-stillingar hans, sérstaklega þegar sérsniðnir dial- eða TLS-krokar eru veittir. Go sýnir ForceAttemptHTTP2 og í nýrri útgáfum skýra Protocols-stillingu fyrir þessi val.
Áfangastaðurinn verður enn að bjóða HTTP/2 í gegnum TLS-samningaviðræður. Skoðaðu Proto- eða ProtoMajor-gildi árangursríks svars til að sjá hvað var notað. HTTPS-beiðni sem tekst í gegnum SOCKS sannar ekki eitt og sér að samið hafi verið um HTTP/2.