From: Andrew Gerrand Date: Mon, 6 Jun 2016 00:41:47 +0000 (+1000) Subject: net/http: send one Transfer-Encoding header when "chunked" set manually X-Git-Tag: go1.7beta2~48 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f9b4556de01710a964ffd0513eb7574a2d1fd62c;p=gostls13.git net/http: send one Transfer-Encoding header when "chunked" set manually Fixes #15960 Change-Id: I7503f6ede33e6a1a93cee811d40f7b297edf47bc Reviewed-on: https://go-review.googlesource.com/23811 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go index c32ff29902..26aefec7de 100644 --- a/src/net/http/serve_test.go +++ b/src/net/http/serve_test.go @@ -4166,6 +4166,20 @@ func testServerContext_ServerContextKey(t *testing.T, h2 bool) { res.Body.Close() } +// https://golang.org/issue/15960 +func TestHandlerSetTransferEncodingChunked(t *testing.T) { + defer afterTest(t) + ht := newHandlerTest(HandlerFunc(func(w ResponseWriter, r *Request) { + w.Header().Set("Transfer-Encoding", "chunked") + w.Write([]byte("hello")) + })) + resp := ht.rawResponse("GET / HTTP/1.1\nHost: foo") + const hdr = "Transfer-Encoding: chunked" + if n := strings.Count(resp, hdr); n != 1 { + t.Errorf("want 1 occurrence of %q in response, got %v\nresponse: %v", hdr, n, resp) + } +} + func BenchmarkClientServer(b *testing.B) { b.ReportAllocs() b.StopTimer() diff --git a/src/net/http/server.go b/src/net/http/server.go index 1a8c0fc6cc..4286d719ec 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -1147,6 +1147,7 @@ func (cw *chunkWriter) writeHeader(p []byte) { // to avoid closing the connection at EOF. cw.chunking = true setHeader.transferEncoding = "chunked" + delHeader("Transfer-Encoding") } } else { // HTTP version < 1.1: cannot do chunked transfer