我一直在尝试使用 httputil.NewSingleHostReverseProxy(*Url)
在内部反向代理我的一些请求
我注意到 gorilla mux 对此不满意,所以我在网上找到了解决 GET
请求问题的修复程序。
但是,似乎 GET
是唯一可以正确反向代理的请求。
u = 使用 url.Parse 生成的 URL
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
。
有没有人以前遇到过这个问题,或者知道是什么导致了这个问题?
最佳答案
这个错误是由返回 301 的路由引起的,原因尚不清楚。 ReverseProxy 对 301、302、303 的回退行为是为了支持 RFC 2616
https://github.com/golang/go/issues/18570
这将方法重写为 GET
关于http - 使用 httputil 和 gorilla/mux 进行反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51174375/