Golang:解释 DumpRequest 和 DumpResponse HTTP/2

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


凤凰求蛊
浏览 188回答 1
1回答

红糖糍粑

HTTP/2 是二进制的,而不是文本的,并且以二进制形式转储将是不可读且无用的。这是有意设计的,并且有据可查:DumpRequest 在其 HTTP/1.x 线路表示中返回给定的请求。它只能由服务器用于调试客户端请求。返回的表示只是一个近似值;初始请求的一些细节在解析为 http.Request 时会丢失。特别是,标头字段名称的顺序和大小写丢失。多值标头中的值顺序保持不变。HTTP/2 请求以 HTTP/1.x 形式转储,而不是其原始二进制表示形式。如果 body 为 true,则 DumpRequest 也会返回正文。为此,它消耗 req.Body,然后用产生相同字节的新 io.ReadCloser 替换它。如果 DumpRequest 返回错误,则 req 的状态未定义。您可以在此处查看实施详细信息
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go