From: Guilherme Goncalves Date: Sat, 23 Jun 2018 22:32:26 +0000 (+0000) Subject: net/http: document and test behavior of ServeMux with ports X-Git-Tag: go1.11beta1~11 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=37f05cc6367e16865b8018948eed7ab2136d9d86;p=gostls13.git net/http: document and test behavior of ServeMux with ports Beginning on Go 1.9, ServeMux has been dropping the port number from the Host header and in the path pattern. This commit explicitly mentions the change in behavior and adds a simple test case to ensure consistency. Fixes #23351. Change-Id: I0270c8bd96cda92c13ac6437cdf66c2807b3042d Reviewed-on: https://go-review.googlesource.com/120557 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go index 4e5741ed90..de76f5eab0 100644 --- a/src/net/http/serve_test.go +++ b/src/net/http/serve_test.go @@ -5924,6 +5924,28 @@ func TestServerCloseListenerOnce(t *testing.T) { } } +// Issue 23351: document and test behavior of ServeMux with ports +func TestStripPortFromHost(t *testing.T) { + mux := NewServeMux() + + mux.HandleFunc("example.com/", func(w ResponseWriter, r *Request) { + fmt.Fprintf(w, "OK") + }) + mux.HandleFunc("example.com:9000/", func(w ResponseWriter, r *Request) { + fmt.Fprintf(w, "uh-oh!") + }) + + req := httptest.NewRequest("GET", "http://example.com:9000/", nil) + rw := httptest.NewRecorder() + + mux.ServeHTTP(rw, req) + + response := rw.Body.String() + if response != "OK" { + t.Errorf("Response gotten was %q", response) + } +} + func BenchmarkResponseStatusLine(b *testing.B) { b.ReportAllocs() b.RunParallel(func(pb *testing.PB) { diff --git a/src/net/http/server.go b/src/net/http/server.go index c244b372fc..edc19c3a4c 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -2137,9 +2137,9 @@ func RedirectHandler(url string, code int) Handler { // "/codesearch" and "codesearch.google.com/" without also taking over // requests for "http://www.google.com/". // -// ServeMux also takes care of sanitizing the URL request path, -// redirecting any request containing . or .. elements or repeated slashes -// to an equivalent, cleaner URL. +// ServeMux also takes care of sanitizing the URL request path and the Host +// header, stripping the port number and redirecting any request containing . or +// .. elements or repeated slashes to an equivalent, cleaner URL. type ServeMux struct { mu sync.RWMutex m map[string]muxEntry