]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: send one Transfer-Encoding header when "chunked" set manually
authorAndrew Gerrand <adg@golang.org>
Mon, 6 Jun 2016 00:41:47 +0000 (10:41 +1000)
committerAndrew Gerrand <adg@golang.org>
Mon, 6 Jun 2016 21:14:27 +0000 (21:14 +0000)
Fixes #15960

Change-Id: I7503f6ede33e6a1a93cee811d40f7b297edf47bc
Reviewed-on: https://go-review.googlesource.com/23811
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/net/http/serve_test.go
src/net/http/server.go

index c32ff299029a49ed74be0f48dbb6a7bec5beac6c..26aefec7def58530db2128d1501410e75902b8ee 100644 (file)
@@ -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()
index 1a8c0fc6cc27ba3d360098e604937d72990ecd4a..4286d719ec8558e6babe8bd1278a2429c3318bc0 100644 (file)
@@ -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