]> Cypherpunks repositories - gostls13.git/commitdiff
http: propagate Set-Cookie in reverse proxy
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 27 May 2011 18:06:53 +0000 (11:06 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 27 May 2011 18:06:53 +0000 (11:06 -0700)
Also adds Host header tests.

Fixes #1886

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4556063

src/pkg/http/reverseproxy.go
src/pkg/http/reverseproxy_test.go

index e4ce1e34c79b54081237817a5b1949fe21204407..9a9e21599b7adedaf6dfdc85fe5af30b5640991e 100644 (file)
@@ -92,6 +92,10 @@ func (p *ReverseProxy) ServeHTTP(rw ResponseWriter, req *Request) {
                }
        }
 
+       for _, cookie := range res.SetCookie {
+               SetCookie(rw, cookie)
+       }
+
        rw.WriteHeader(res.StatusCode)
 
        if res.Body != nil {
index 162000eceb3d1edb3a4c36acf7ff5b767ab63a83..d7bcde90d3af84206824691462124c117b8ba1f9 100644 (file)
@@ -20,7 +20,11 @@ func TestReverseProxy(t *testing.T) {
                if r.Header.Get("X-Forwarded-For") == "" {
                        t.Errorf("didn't get X-Forwarded-For header")
                }
+               if g, e := r.Host, "some-name"; g != e {
+                       t.Errorf("backend got Host header %q, want %q", g, e)
+               }
                w.Header().Set("X-Foo", "bar")
+               SetCookie(w, &Cookie{Name: "flavor", Value: "chocolateChip"})
                w.WriteHeader(backendStatus)
                w.Write([]byte(backendResponse))
        }))
@@ -33,7 +37,9 @@ func TestReverseProxy(t *testing.T) {
        frontend := httptest.NewServer(proxyHandler)
        defer frontend.Close()
 
-       res, err := Get(frontend.URL)
+       getReq, _ := NewRequest("GET", frontend.URL, nil)
+       getReq.Host = "some-name"
+       res, err := DefaultClient.Do(getReq)
        if err != nil {
                t.Fatalf("Get: %v", err)
        }
@@ -43,6 +49,12 @@ func TestReverseProxy(t *testing.T) {
        if g, e := res.Header.Get("X-Foo"), "bar"; g != e {
                t.Errorf("got X-Foo %q; expected %q", g, e)
        }
+       if g, e := len(res.SetCookie), 1; g != e {
+               t.Fatalf("got %d SetCookies, want %d", g, e)
+       }
+       if cookie := res.SetCookie[0]; cookie.Name != "flavor" {
+               t.Errorf("unexpected cookie %q", cookie.Name)
+       }
        bodyBytes, _ := ioutil.ReadAll(res.Body)
        if g, e := string(bodyBytes), backendResponse; g != e {
                t.Errorf("got body %q; expected %q", g, e)