如何在 Go 中通过 http:// 发出仅 HTTP2 的请求?

问题描述 投票:0回答:3

我正在使用 Go 1.6,想要通过

http://
发出仅 HTTP2 的请求。

目前尝试执行此操作会导致:

Head http://localhost:2076/completed/764c1b6bc55548707507a2dd25570483a7216bf4:http2:不支持的方案

要强制使用http2,我相信我需要将

http.Client.Transport.TLSConfig.NextProtos
设置为
[]string{"h2"}

还需要什么?

go http2
3个回答
10
投票

您需要使用

https
,而不是
http
。 http2 传输无法识别
http
方案。


0
投票

可以使用

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))

-1
投票

HTTP/2.0 默认情况下适用于高度安全的连接。它使用高质量的密码。因此它只能在 HTTPS 连接上运行。此外,要建立 HTTPS 连接,您还需要启用 SSL 并安装所需的证书。

© www.soinside.com 2019 - 2024. All rights reserved.