如何强制一个简单的 Go 客户端使用 HTTP/2 并防止它退回到 HTTP 1.1?我有一个在“本地主机”上运行的简单 HTTP/2 服务器,它在回复中返回请求的详细信息。这是使用 Google Chrome 浏览器对此 URL 的输出:https://localhost:40443/bananasI like bananas!Method = GETURL = /bananasProto = HTTP/2.0Host = localhost:40443RequestURI = /bananas但这是我为我的 Go 客户端代码得到的。你可以看到它回落到 HTTP 1.1I like monkeys!Method = GETURL = /monkeysProto = HTTP/1.1Host = localhost:40443RequestURI = /monkeys下面是我使用 HTTP/2 连接同一服务器的最佳尝试的源代码,但它总是回退到 HTTP 1.1// simple http/2 clientpackage mainimport ( "crypto/tls" "crypto/x509" "fmt" "io/ioutil" "log" "net/http")const ( certFile = "client-cert.pem" keyFile = "client-key.pem" caFile = "server-cert.pem")func main() { // Load client certificate cert, err := tls.LoadX509KeyPair(certFile, keyFile) if err != nil { log.Fatal(err) } // Load CA cert caCert, err := ioutil.ReadFile(caFile) if err != nil { log.Fatal(err) } caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) // Setup HTTPS client tlsConfig := &tls.Config{ Certificates: []tls.Certificate{cert}, RootCAs: caCertPool, } tlsConfig.BuildNameToCertificate() transport := &http.Transport{TLSClientConfig: tlsConfig} client := &http.Client{Transport: transport} response, err := client.Get("https://localhost:40443/monkeys") if err != nil { log.Fatal(err) } defer response.Body.Close() // dump response text, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } fmt.Printf("Body:\n%s", text)}任何建议,包括指向其他工作示例的指针,这些示例说明如何在 Go 中发出 HTTP/2 客户端请求,我们将不胜感激。
1 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
首先导入"golang.org/x/net/http2"
包。然后改变
transport := &http.Transport{TLSClientConfig: tlsConfig}
到
transport := &http2.Transport{TLSClientConfig: tlsConfig}
- 1 回答
- 0 关注
- 200 浏览
添加回答
举报
0/150
提交
取消