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 は body も返します。そのために、req.Body を消費してから、同じバイトを生成する新しい io.ReadCloser に置き換えます。DumpRequest がエラーを返した場合、req の状態は未定義です。

実装の詳細はこちらで確認できます

于 2020-10-20T04:14:10.243 に答える