http - 使用 httputil 和 gorilla/mux 进行反向代理

标签 http go reverse-proxy gorilla mux

我一直在尝试使用 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 请求很好,但是当发送 POSTPATCH 时,接收 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/

相关文章:

安卓下载远程内容

go - nginx 502 错误始终存在,没有应用程序错误

go - 使用服务帐户在 Golang 中验证对 Cloud Function 的客户端调用

安装 go 工具的 go 模块

NGINX 反向代理和 Access-Control-Allow-Origin 问题

python - Flask 不会在 POST 方法上重定向

node.js - 使用 Node.js 将 http 重定向到 https

c# - 抑制 HTTP_X_FORWARDED_FOR http header ,c# .net C++

haskell - Haskell Servant 的部分反向代理

redirect - 拦截后端 301/302 重定向(proxy_pass)并重写到另一个位置 block 可能吗?