Как получить заголовок ответа от обратного прокси - PullRequest
0 голосов
/ 07 ноября 2019

Как я могу обнаружить и отреагировать на заголовок ответа из обратного прокси-сервера?

Я пишу метод промежуточного программного обеспечения, который вводится в обратный прокси-сервер. Я подтвердил, что промежуточное программное обеспечение вызывается.

Сервер устанавливает заголовок ответа X-SERVER-VAR со значением Foo. Мне нужно обнаружить и запустить некоторый код, основанный на значении.

Я подумал, что прочитал бы ResponseWriter, думая, что ответ сервера должен включать значение, но ничего не регистрируется.

func SessionHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Printf(w.Header().Get("X-SERVER-VAR"))
        next.ServeHTTP(w, r)
    })
}

Я использую github.com/gorilla/mux для присоединения этого обработчика промежуточного программного обеспечения.

Я настраиваю все с помощью кода, подобного приведенному ниже (упрощено для этого вопроса).

func newProxy(remote string) http.Handler {
    proxyurl, err := url.Parse(remote)
    if err != nil {
        panic(err)
    }
    proxy := httputil.NewSingleHostReverseProxy(proxyurl)
    return proxy
}

func main() {
    r := mux.NewRouter()
    r.Use(SessionHandler)
    proxy := newProxy("https://www.example.com/")
    r.PathPrefix("/").Handler(proxy)
    log.Fatal(http.ListenAndServe(":9001", r))
}

Если это не такне возможно с промежуточным ПО, возможно ли обнаружить заголовок ответа с сервера другим способом?

1 Ответ

2 голосов
/ 07 ноября 2019

Вы не можете ожидать, что заголовки ответа будут прочитаны до их установки.

Измените это:

func SessionHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Printf(w.Header().Get("X-SERVER-VAR"))
        next.ServeHTTP(w, r)
    })
}

На это:

func SessionHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        next.ServeHTTP(w, r)
        log.Printf(w.Header().Get("X-SERVER-VAR"))
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...