我一直在尝试使用httputil.NewSingleHostReverseProxy(*Url)
在内部反向代理一些请求
我注意到大猩猩对此不满意,因此我在网上找到了一个修复程序,该修复程序解决了GET
请求的问题。
但是,似乎GET
是唯一可以正确反向代理的请求。
u = generated URL with url.Parse
api.Path("/feature").Methods("POST").HandlerFunc(handler(httputil.NewSingleHostReverseProxy(u)))
func handler(p *httputil.ReverseProxy) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
r.URL.Path = mux.Vars(r)["path"]
p.ServeHTTP(w, r)
}
}
这对于GET
请求很好用,但是在发送POST
或PATCH
时,接收的http方法设置为GET
。我已经确认代理的r.Method
一端是POST
,另一端是GET
。
有没有人以前遇到过这个问题,或者知道是什么原因造成的?
答案 0 :(得分:0)
此错误是由返回301(仍不清楚原因)的路由引起的。 ReverseProxy在301、302、303上的后备行为是为了支持RFC 2616
https://github.com/golang/go/issues/18570
这会将方法重写为GET