ホームページ  >  記事  >  バックエンド開発  >  golangでgRPCクライアントのhttpホストヘッダーをオーバーライドする

golangでgRPCクライアントのhttpホストヘッダーをオーバーライドする

王林
王林転載
2024-02-09 08:18:181297ブラウズ

golangでgRPCクライアントのhttpホストヘッダーをオーバーライドする

golang で gRPC クライアントの http ホスト ヘッダーをオーバーライドするのは一般的な要件です。 gRPC は、高性能のクロスランゲージ リモート プロシージャ コール フレームワークです。gRPC を使用して通信する場合、http リクエストのホスト ヘッダーのカスタマイズが必要になる場合があります。 PHP エディター Xigua は、ビジネス ニーズをより適切に満たすために、この関数を golang で実装する方法を紹介します。

質問の内容

gRPC クライアント経由で接続経由でリクエストを送信しました。 リーリー

サーバー側から見ると、http.request の

host が正確な hostname:port であることがわかります。次に、私のnginxサーバーの設定は次のとおりです リーリー

これは一般的な仮想ホスティング テクノロジです。

grpc.Dial(xxx:port) でどのホスト名を使用しても、正常に動作します。ただし、を入れると、 リーリー

grpc コンテキスト内 (http2 リクエストのヘッダーに設定されます)。このリクエストは nginx によってブロックされ、

が返されます。 リーリー

ホスト名を手動で入力する必要があるのは、

grpc.Dial のホスト名が固定されているためです。また、port の後に RESTful API のルーティング パスが続くため、リバース プロキシを実行するために別の場所を使用することはできません。

ホスト名が固定され、ルートも固定されている場合、リバース プロキシを使用する他の方法はありますか?

(2009/23) 更新: http2 のホスト ヘッダーが

:Authority 擬似ヘッダーに置き換えられていることが判明しました。

回避策

gRPC は HTTP/2 を使用し、

:host ヘッダーを使用せず、代わりに :authority 擬似ヘッダーを使用します。このヘッダーの値はここで決定されます: https://github .com/grpc/grpc-go/blob/aa6ce35c792863305e0f42acc27f2c7153275f89/clientconn.go#L1942

TL;博士号

デフォルトでは、

:authority ヘッダーに使用される値は、url://authority/endpoint 形式のユーザー ダイヤル ターゲットのエンドポイント部分です。

gRPC-Go は、この

authority をオーバーライドするダイヤルアップ オプションもサポートしています。 https://pkg.go.dev/google.golang.org/grpc#WithAuthorityを参照してください。ただし、このダイヤル オプションは、TLS ハンドシェイク中に使用される ServerName 値をオーバーライドすることにも注意してください。

さらにご質問やご不明な点がございましたら、GitHub リポジトリからお気軽にお問い合わせください。そこでクエリの応答時間が短縮されます。

以上がgolangでgRPCクライアントのhttpホストヘッダーをオーバーライドするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。