diff --git a/websocketproxy.go b/websocketproxy.go index 29f5bda..63d39ba 100644 --- a/websocketproxy.go +++ b/websocketproxy.go @@ -97,6 +97,9 @@ func (w *WebsocketProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) { for _, cookie := range req.Header[http.CanonicalHeaderKey("Cookie")] { requestHeader.Add("Cookie", cookie) } + if req.Host != "" { + requestHeader.Set("Host", req.Host) + } // Pass X-Forwarded-For headers too, code below is a part of // httputil.ReverseProxy. See http://en.wikipedia.org/wiki/X-Forwarded-For diff --git a/websocketproxy_test.go b/websocketproxy_test.go index 63f7861..b90e02b 100644 --- a/websocketproxy_test.go +++ b/websocketproxy_test.go @@ -45,6 +45,12 @@ func TestProxy(t *testing.T) { go func() { mux2 := http.NewServeMux() mux2.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + // Don't upgrade if original host header isn't preserved + if r.Host != "127.0.0.1:7777" { + log.Printf("Host header set incorrectly. Expecting 127.0.0.1:7777 got %s", r.Host) + return + } + conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err)