0
clientt := &http.Client{
    Timeout: 30 * time.Second,
}
var tr = &http2.Transport{}
clientt.Transport = tr

我创建一个客户端并发送 http/2 请求。使用 http2 传输,但在 DumpRequest 我看到 GET / HTTP/1.1 主机:www.xxxxq23.com

在响应转储中,我看到 HTTP/2.0

为什么请求使用 HTTP/1.1 ?如何更改为 HTTP/2.0

4

1 回答 1

1

HTTP/2 是二进制的,而不是文本的,并且以二进制形式转储将是不可读且无用的。这是有意设计的,并且有据可查

DumpRequest 在其 HTTP/1.x 线路表示中返回给定的请求。它只能由服务器用于调试客户端请求。返回的表示只是一个近似值;初始请求的一些细节在解析为 http.Request 时会丢失。特别是,标头字段名称的顺序和大小写丢失。多值标头中的值顺序保持不变。HTTP/2 请求以 HTTP/1.x 形式转储,而不是其原始二进制表示形式。

如果 body 为 true,则 DumpRequest 也会返回正文。为此,它消耗 req.Body,然后用产生相同字节的新 io.ReadCloser 替换它。如果 DumpRequest 返回错误,则 req 的状态未定义。

您可以在此处查看实施详细信息

于 2020-10-20T04:14:10.243 回答