问题:
在实现 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中文网其他相关文章!