リモートサーバーに要求をプロキシする前に、REST APIを呼び出してユーザーを認証しようとしています。 しかし、私は、リモートサーバーへのプロキシの前にAPI呼び出しを行った場合、要求は次のエラーで失敗することを見つける:カスタム認証を使用するGolangリバースプロキシ
http: proxy error: http: ContentLength=139 with Body length 0.
私は、リモートサーバーへのプロキシの前にAPI呼び出しを削除する場合は、リクエストが得ることができます正しい応答を返します。
私のミドルウェアには、以下の通りである:
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// the api call to external auth server
user_id, err := authenticate(r.FormValue("username"), r.FormValue("password"))
if err != nil {
http.Error(w, err.Error(), 401)
return
}
next.ServeHTTP(w, r)
})
}
私のリバースプロキシは、以下の通りである:
func NewReverseProxy(target *url.URL) *httputil.ReverseProxy {
director := func(req *http.Request) {
req.URL.Scheme = target.Scheme
req.URL.Host = target.Host
req.URL.Path = target.Path
targetQuery := target.RawQuery
if targetQuery == "" || req.URL.RawQuery == "" {
req.URL.RawQuery = targetQuery + req.URL.RawQuery
} else {
req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery
}
if _, ok := req.Header["User-Agent"]; !ok {
// explicitly disable User-Agent so it's not set to default value
req.Header.Set("User-Agent", "")
}
}
return &httputil.ReverseProxy{Director: director}
}
を私は問題とは何
r.Use(AuthMiddleware)
r.Post("/", NewReverseProxy(targets).ServeHTTP)
をルーティングするためのカイを使用していますこの実装ですか?
心に来る最初の事はある:あなたが読んでください体とそれを閉じますか? – RickyA
http://stackoverflow.com/questions/31337891/net-http-http-contentlength-222-with-body-length-0 – RickyA
[net/http:http:ContentLength = 222 body length 0の可能な重複]( http://stackoverflow.com/questions/31337891/net-http-http-contentlength-222-with-body-length-0) – stderr