登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-08 18:00:36 353浏览 收藏

你在学习Golang相关的知识吗?本文《如何从反向代理获取响应标头》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

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

我正在编写一个注入反向代理的中间件方法。我确认正在调用中间件。

服务器设置响应头 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))
}

如果中间件无法实现,是否可以通过其他方式检测来自服务器的响应标头?


解决方案


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

更改此:

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"))
    })
}

好了,本文到此结束,带大家了解了《如何从反向代理获取响应标头》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>