如何从反向代理获取响应头

如何从反向代理中检测响应标头并对响应标头做出反应?

我正在编写一种中间件方法,该方法已注入到反向代理中。我确认正在调用中间件。

服务器设置值为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))
}

如果中间件无法实现,是否可以通过另一种方式从服务器检测响应标头?

lj0122 回答:如何从反向代理获取响应头

您不能期望在设置响应头之前先读取它们。

更改此:

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"))
    })
}
本文链接:https://www.f2er.com/3145164.html

大家都在问