Golang-ReverseProxy源码分析

golang 可以通过 ReverseProxy 实现了服务器代理相关的功能。其实就是代理返回了什么结果,就将内容返回客户端。

Go1.16.5 发布

刚刚 Go Team 发布了 Go 1.16.5 和 1.15.13,这是两个小版本发布。如果传入非常大的指数,math/big.Rat 的 SetString 和 Unmarshaltext 方法可能导致 panic 或不可恢复的致命错误。

Golang ReverseProxy 如何实现反向代理?

调用链路为:所以 ReverseProxy 结构体也实现了 ServeHTTP 方法 , 方法实现功能有:1.拷贝上游请求的 context 到下游请求2.使用 指定 director修改请求3.根据请求 Header 判断是否需要升级协议4.删除上游请求中的 hop-by-hop Header, 维持上游持久连接, 不需要透传到下游5.设置 X-Forward-For Header,追加当前节点 IP6.使用连接池,向下游发起请求7.处理 httpcode 101 协议升级:8.删除请求中的 hop-by-hop Header, 不要返回给上游9.根据结构体 ReverseProxy.ModifyResponse判断是否修改响应体内容10.拷贝下游响应头部到上游响应请求11.返回 下游请求 HTTP 状态码12.拷贝 下游响应内容 到 上游响应请求13.刷新内容到 response。

网站地图