首頁 >後端開發 >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 請求時,可能有必要檢查請求正文,同時保留原始請求以供進一步處理,例如將其轉發到反向代理處理程序。要實現此目標,請考慮以下方法:

當請求正文在檢查期間耗盡,沒有為後續消費者(例如反向代理)留下任何內容時,就會出現問題。要解決此問題,您可以將請求正文讀入緩衝區,然後建立兩個由該緩衝區支援的新讀取器:

  1. 建立緩衝區: 使用io.ReadAll( r.Body) 將請求正文讀入[]byte 緩衝區。此操作會耗盡原始請求內文。
  2. 建立兩個讀取器:使用io.NopCloser(bytes.NewBuffer(buf)) 建立兩個由相同的讀取器支援的新讀取器(rdr1 和rdr2 )緩衝。這些閱讀器將允許您多次存取正文,而不影響原始請求。
  3. 使用新閱讀器:使用 rdr1 執行檢查。
  4. 重置請求體:將請求體(r.Body)設為rdr2(包裝在io.NopCloser中)以重置使其恢復到原來的狀態。這允許反向代理處理請求,就好像請求體沒有被耗盡一樣。

使用此方法,您可以檢查請求正文,執行必要的操作,並且仍然將未經修改的原始請求傳遞給反向代理,避免錯誤。

以上是如何檢查和保留 HTTP 請求正文以進行反向代理處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn