如何从反向代理中检测响应 header 并对其使用react?
我正在编写一个注入(inject)反向代理的中间件方法。我确认正在调用中间件。
服务器设置响应头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))
}
如果中间件不可能,是否可以通过另一种方式检测来自服务器的响应 header ?
最佳答案
您不能期望在设置响应 header 之前阅读它们。
改变这个:
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"))
})
}
关于go - 如何从反向代理获取响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58748084/