我正在使用 Go 1.6,想要通过
http://
发出仅 HTTP2 的请求。
目前尝试执行此操作会导致:
Head http://localhost:2076/completed/764c1b6bc55548707507a2dd25570483a7216bf4:http2:不支持的方案
要强制使用http2,我相信我需要将
http.Client.Transport.TLSConfig.NextProtos
设置为[]string{"h2"}
。
还需要什么?
您需要使用
https
,而不是http
。 http2 传输无法识别 http
方案。
可以使用
http2.Transport.AllowHTTP
强制执行 HTTP2。此外,使用 https 的答案在 2023 年不再有效。HTTP2 并不总是需要 TLS(尽管网络浏览器需要它,但客户端服务器应用程序可以使用普通连接。)
import (
"golang.org/x/net/http2"
"net/http"
)
...
client := &http.Client{
Transport: &http2.Transport{
AllowHTTP: true,
DialTLSContext: nil,
DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) {
return net.Dial(network, addr)
},
},
}
...
h2server := &http2.Server{IdleTimeout: time.Second * 60}
h2handler := h2c.NewHandler(http.HandlerFunc(handler), h2server)
log.Fatal(http.ListenAndServe("127.0.0.1:1234", h2handler))
HTTP/2.0 默认情况下适用于高度安全的连接。它使用高质量的密码。因此它只能在 HTTPS 连接上运行。此外,要建立 HTTPS 连接,您还需要启用 SSL 并安装所需的证书。