为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
30秒到达战场 2023-07-31 17:27:44
如何检测反向代理中的响应标头并对其做出反应?我正在编写一个注入反向代理的中间件方法。我确认正在调用中间件。服务器设置一个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 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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


改变这个:


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

    })

}


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信