Обратный прокси с httputil и гориллой / mux - PullRequest
0 голосов
/ 04 июля 2018

Я пытался отменить прокси некоторые мои запросы внутренне с помощью httputil.NewSingleHostReverseProxy(*Url) Я заметил, что Gorilla Mux не устраивает этого, поэтому я нашел в Интернете исправление, которое решило проблему для 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 на другом. Кто-нибудь сталкивался с этой проблемой раньше или знает, что может быть причиной этого?

1 Ответ

0 голосов
/ 04 июля 2018

Эта ошибка была вызвана маршрутом, возвращающим 301, до сих пор неясно, почему. Откат ReverseProxy на 301, 302, 303 должен поддерживать RFC 2616

https://github.com/golang/go/issues/18570 Это переписывает метод в GET

...