我的原始问题here被标记为this问题的重复项。我没有实现它的运气,并且怀疑我的问题被误解了,所以在我的问题结束之时,我从一个更具体的问题着手。
我正在尝试基于来自反向代理的请求中的中间件内部的响应标头设置cookie。
这是工作流程:
X-FOO
MYAPPFOO
响应标头的值设置X-FOO
cookie来修改响应[有人建议使用自定义http.ResponseWriter
,但尝试并搜索更多信息后,尚不清楚如何解决此问题。
由于我无法掌握用例的自定义ResponseWriter的概念,因此我将发布代码,以更精确地演示在遇到困难时我想做的事情:
package main import ( "github.com/gorilla/mux" "log" "net/http" "net/http/httputil" "net/url" ) func setCookie(w http.ResponseWriter, name string, value string) { ... http.SetCookie(w, &cookie) } func handler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // setCookie() works here // but I cannot access w.Header().Get("X-FOO") next.ServeHTTP(w, r) // I can access w.Header().Get("X-FOO") here // but setCookie() does not cookie the user's browser // If I could do it all in one place, this is what I would do: if r.Method == "POST" && r.URL.String() == "/login" { foo := w.Header().Get("X-FOO") setCookie(w, "MYAPPFOO", foo) } }) } func main() { r := mux.NewRouter() r.Use(handler) proxy := httputil.NewSingleHostReverseProxy("https://baz.example.com/") r.PathPrefix("/").Handler(proxy) log.Fatal(http.ListenAndServe(":9001", r)) }
作为旁注,我能够按照上一个问题的注释中的建议使用
ReverseProxy.ModifyResponse
进行此工作,但我真的很想使用中间件来实现这一点,以使从配置中动态创建代理的代码保持干净。 (不在示例代码中)
我的原始问题在这里被标记为该问题的重复。我没有实现它的运气,并且怀疑我的问题被误解了,所以在我的问题结案之后,我从一个新的...
从http.ResponseWriter
方法的文档中:((已添加重点)