問題:
ServeHTTP メソッドを実装するカスタム HTTP ハンドラーでは、 req.ParseForm() を使用して受信 POST リクエストの本文を検査すると、リクエストがリバース プロキシに渡されるときにエラーが発生します。これは、本文を読み取ると 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 // Resets the request body without consuming any data
注:
バイト。 Close() メソッドがないため、バッファには io.ReadCloser インターフェイスが実装されていません。したがって、各リーダーは io.NopCloser でラップされます。
以上がリバース プロキシ時に HTTP リクエスト本文の整合性を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。