HTTP.Handler による本文の検査中にリクエストの状態を保持する
HTTP ハンドラーの実装のコンテキストでは、次のようなメソッドを使用してリクエストの本文にアクセスします。 req.ParseForm() はジレンマを引き起こす可能性があります。このような検査は多くの場合必要ですが、リクエストのボディ ストリームが枯渇し、後続のハンドラー (リバース プロキシなど) で使用できなくなる可能性があります。
問題: ボディ ストリームの枯渇
req.ParseForm() などのメソッドを呼び出してリクエスト本文が消費されると、req.Body.Reader ストリームはドレインされ、ダウンストリーム ハンドラーにデータは残りません。これにより、予想されるリクエスト本文の長さが枯渇状態と一致しなくなるため、プロキシ転送時にエラーが発生します。
解決策: 本文ストリームを分割します
この課題を克服するには、緩衝層を含む技術を使用することができる。リクエスト本文をバッファに読み取り、そのバッファを使用して複数の新しいリーダーを作成することで、元の本文ストリームから検査を分離できます。
手順:
例:
buf, _ := io.ReadAll(r.Body) rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) doStuff(rdr1) r.Body = rdr2
利点:
以上が後続のハンドラーのデータを失わずに HTTP リクエスト本文を検査するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。