Skip to content

Commit

Permalink
net/http: document and test behavior of ServeMux with ports
Browse files Browse the repository at this point in the history
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 <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
  • Loading branch information
Guilherme Goncalves authored and bradfitz committed Jun 25, 2018
1 parent 444e7dd commit 37f05cc
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
22 changes: 22 additions & 0 deletions src/net/http/serve_test.go
Expand Up @@ -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) {
Expand Down
6 changes: 3 additions & 3 deletions src/net/http/server.go
Expand Up @@ -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
Expand Down

0 comments on commit 37f05cc

Please sign in to comment.