首页 > 后端开发 > Golang > 反向代理时如何保持 HTTP 请求正文完整性?

反向代理时如何保持 HTTP 请求正文完整性?

Linda Hamilton
发布: 2024-12-16 04:28:21
原创
442 人浏览过

How Can I Preserve HTTP Request Body Integrity When Reverse Proxying?

保留反向代理的 HTTP 请求正文完整性

问题:

在实现 ServeHTTP 方法的自定义 HTTP 处理程序中,使用 req.ParseForm() 检查传入 POST 请求的正文会在请求时导致错误传递给反向代理。发生这种情况是因为读取正文耗尽了 req.Body.Reader 流,没有为后续消费者留下任何内容。

解决方案:

在检查body,请考虑以下技术:

  1. 使用以下方法将请求正文读入缓冲区io.ReadAll(r.Body).
  2. 使用 io.NopCloser(bytes.NewBuffer(buf)) 创建两个新的读取器 rdr1 和 rdr2,由缓冲区支持。
  3. 使用 rdr1检查身体并执行所需的操作。
  4. 将 r.Body 重置为 rdr2 以保留原始状态反向代理的请求状态。

代码示例:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板