問題:
在實作ServeHTTP 方法的自訂HTTP處理程序中,使用req.ParseForm() 檢查傳入POST請求的正文會在請求時導致錯誤傳遞給反向代理。發生這種情況是因為讀取正文耗盡了 req.Body.Reader 流,沒有為後續消費者留下任何內容。
解決方案:
在檢查body,請考慮以下技術:
程式碼範例:
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() 方法,Buffer 沒有實作 io.ReadCloser 介面;因此,每個讀者都包裝在 io.NopCloser 中。
以上是反向代理時如何保持 HTTP 請求正文完整性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!