HTTP/2 masuk ke dalam terowong SOCKS Go
Klon pengangkutan HTTP standard, pilih proksi SOCKS dan periksa protokol destinasi yang benar-benar dirundingkan.
Terowong SOCKS membawa satu sambungan TCP. Go boleh melakukan TLS dengan destinasi melalui terowong itu dan merundingkan HTTP/2 di sana; pelayan SOCKS sendiri tidak perlu bertutur HTTP/2.
Dalam program yang mengekalkan pengangkutan lalai standard Go, klon konfigurasinya dan pilih proksi:
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,
}
Proksi dan destinasi kekal sebagai nilai yang berbeza. Pilih titik akhir SOCKS5 daripada senarai proksi SOCKS5 untuk nilai proksi; HTTP/2 masih dirundingkan dengan destinasi. Gunakan client untuk meminta URL perkhidmatan HTTPS sebenar, kemudian tutup badan respons melalui kitaran hayat biasa aplikasi.
Pengangkutan lalai standard menyokong HTTP/2. Mengklonnya mengekalkan konfigurasi itu sambil membenarkan pilihan proksi berubah. Penegasan jenis menganggap program tidak menggantikan http.DefaultTransport dengan RoundTripper lain.
Untuk pengangkutan yang dibina secara berasingan, semak konfigurasi HTTP/2-nya, terutamanya apabila menyediakan cangkuk dial atau TLS tersuai. Go mendedahkan ForceAttemptHTTP2 dan, dalam keluaran yang lebih baharu, konfigurasi Protocols yang eksplisit untuk pilihan tersebut.
Destinasi masih perlu menawarkan HTTP/2 melalui rundingan TLS. Periksa nilai Proto atau ProtoMajor respons yang berjaya untuk melihat apa yang digunakan. Permintaan HTTPS yang berjaya melalui SOCKS tidak dengan sendirinya membuktikan bahawa protokol yang dirundingkan ialah HTTP/2.