]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: set Content-Type header in Redirect
authorDmitri Shuralyov <shurcooL@gmail.com>
Wed, 19 Jul 2017 03:59:40 +0000 (23:59 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 8 Aug 2017 06:09:59 +0000 (06:09 +0000)
Setting the Content-Type header explicitly allows browsers to know what
the type of the content is. Otherwise, they have to guess the type from
the content itself, which could lead to unpredictable behavior, and
increases CPU usage.

Not setting the Content-Type despite writing a body may also trigger
unwanted warnings in user middleware, and make it more difficult to
resolve valid issues where the user forgets to set Content-Type in
some situations where it should be set.

There is some precedent for doing this in http.FileServer, which
sets "Content-Type" to "text/html; charset=utf-8" before writing
<pre><a href=...></a></pre> HTML.

Change-Id: I24286827bebf4da8adee9238b8c5a94d4069c8db
Reviewed-on: https://go-review.googlesource.com/50510
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/net/http/server.go

index 2fa8ab23d8a10ffa4153d61ef82651c07b492b55..d370be9ecddb7adff3e08c6b1b2c891759679f1e 100644 (file)
@@ -2013,13 +2013,17 @@ func Redirect(w ResponseWriter, r *Request, url string, code int) {
                }
        }
 
-       w.Header().Set("Location", hexEscapeNonASCII(url))
-       w.WriteHeader(code)
-
        // RFC 2616 recommends that a short note "SHOULD" be included in the
        // response because older user agents may not understand 301/307.
        // Shouldn't send the response for POST or HEAD; that leaves GET.
-       if r.Method == "GET" {
+       writeNote := r.Method == "GET"
+
+       w.Header().Set("Location", hexEscapeNonASCII(url))
+       if writeNote {
+               w.Header().Set("Content-Type", "text/html; charset=utf-8")
+       }
+       w.WriteHeader(code)
+       if writeNote {
                note := "<a href=\"" + htmlEscape(url) + "\">" + statusText[code] + "</a>.\n"
                fmt.Fprintln(w, note)
        }