如何檢測反向代理中的響應標頭并對其做出反應?我正在編寫一個注入反向代理的中間件方法。我確認正在調用中間件。服務器設置一個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"))
})
}
- 1 回答
- 0 關注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消