From fb86bbe2397453aaf793ec00a7233b858f17bd2c Mon Sep 17 00:00:00 2001 From: Patrick Mylund Nielsen Date: Mon, 6 Feb 2012 17:55:47 +1100 Subject: [PATCH] net/http: Don't set Content-Type header for HEAD requests by default since the real type is not inferred. Fixes #2885. R=golang-dev, dsymonds, bradfitz CC=golang-dev https://golang.org/cl/5633045 --- src/pkg/net/http/serve_test.go | 9 +++++++-- src/pkg/net/http/server.go | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pkg/net/http/serve_test.go b/src/pkg/net/http/serve_test.go index 147c216ec78..e2860c3edcf 100644 --- a/src/pkg/net/http/serve_test.go +++ b/src/pkg/net/http/serve_test.go @@ -504,8 +504,9 @@ func Test304Responses(t *testing.T) { } // TestHeadResponses verifies that responses to HEAD requests don't -// declare that they're chunking in their response headers and aren't -// allowed to produce output. +// declare that they're chunking in their response headers, aren't +// allowed to produce output, and don't set a Content-Type since +// the real type of the body data cannot be inferred. func TestHeadResponses(t *testing.T) { ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) { _, err := w.Write([]byte("Ignored body")) @@ -527,6 +528,10 @@ func TestHeadResponses(t *testing.T) { if len(res.TransferEncoding) > 0 { t.Errorf("expected no TransferEncoding; got %v", res.TransferEncoding) } + ct := res.Header.Get("Content-Type") + if ct != "" { + t.Errorf("expected no Content-Type; got %s", ct) + } body, err := ioutil.ReadAll(res.Body) if err != nil { t.Error(err) diff --git a/src/pkg/net/http/server.go b/src/pkg/net/http/server.go index dea75b1dfd4..288539ba576 100644 --- a/src/pkg/net/http/server.go +++ b/src/pkg/net/http/server.go @@ -341,7 +341,7 @@ func (w *response) WriteHeader(code int) { } } else { // If no content type, apply sniffing algorithm to body. - if w.header.Get("Content-Type") == "" { + if w.header.Get("Content-Type") == "" && w.req.Method != "HEAD" { w.needSniff = true } }