具有httputil和gorilla / mux的反向代理

时间:2018-07-04 13:02:10

标签: http go reverse-proxy gorilla mux

我一直在尝试使用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请求很好用,但是在发送POSTPATCH时,接收的http方法设置为GET。我已经确认代理的r.Method一端是POST,另一端是GET。 有没有人以前遇到过这个问题,或者知道是什么原因造成的?

1 个答案:

答案 0 :(得分:0)

此错误是由返回301(仍不清楚原因)的路由引起的。 ReverseProxy在301、302、303上的后备行为是为了支持RFC 2616

https://github.com/golang/go/issues/18570 这会将方法重写为GET