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

标签 go

如何从反向代理中检测响应 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/

相关文章:

unit-testing - beego app如何编写测试用例?

json - panic : json: cannot unmarshal array into Go value of type main. 结构

go - 交叉编译到 ARMv7 失败

image - Julia 设置图像渲染被并发破坏

mongodb - Mongo如何加入两个集合并在第二个集合上添加条件

go - 接口(interface)提供哪些保证?

go - 关于golang数组

go - == true 已评估但未使用

go - 如何将gif分割成图片

javascript - 如何以数组形式访问 JavaScript 对象