ホームページ >バックエンド開発 >Golang >リバース プロキシ処理のために HTTP リクエスト本文を検査して保存するにはどうすればよいですか?

リバース プロキシ処理のために HTTP リクエスト本文を検査して保存するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 22:57:15782ブラウズ

How Can I Inspect and Preserve an HTTP Request Body for Reverse Proxy Handling?

リバース プロキシ処理のためにリクエスト ボディを保存する

一部のシナリオでは、カスタム http.Handler で HTTP リクエストを検査するときに、必要になる場合があります。リクエストの本文を調べるだけでなく、リバース プロキシ ハンドラーに転送するなど、さらなる処理のために元のリクエストも保存します。これを実現するには、次のアプローチを検討してください。

この問題は、検査中にリクエスト本文が排出され、リバース プロキシのように後続のコンシューマに何も残さないときに発生します。これを回避するには、リクエストの本文をバッファに読み込み、このバッファを基にした 2 つの新しいリーダーを作成します。

  1. バッファの作成: Use io.ReadAll( r.Body) を使用して、リクエスト本文を []byte バッファに読み込みます。この操作により、元のリクエスト本文が削除されます。
  2. 2 つのリーダーの作成: io.NopCloser(bytes.NewBuffer(buf)) を使用して、同じものをサポートする 2 つの新しいリーダー (rdr1 と rdr2) を作成します。バッファ。これらのリーダーを使用すると、元のリクエストに影響を与えることなく、本文に複数回アクセスできます。
  3. 新しいリーダーを使用します: rdr1 を使用して検査を実行します。
  4. リセットリクエストボディ: リクエストボディ (r.Body) を rdr2 (io.NopCloser でラップ) に設定して、その状態にリセットします。元の状態。これにより、リバース プロキシは、本文が排出されていないかのようにリクエストを処理できるようになります。

このアプローチを使用すると、リクエストの本文を検査し、必要なアクションを実行しながら、元のリクエストを変更せずに次のリクエストに渡すことができます。リバース プロキシを使用してエラーを回避します。

以上がリバース プロキシ処理のために HTTP リクエスト本文を検査して保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。