使用HTTP.Handler 檢查正文時保留請求狀態
在實現HTTP 處理程序的上下文中,使用以下方法存取請求正文.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中文網其他相關文章!