diff options
author | Andrew Gerrand <adg@golang.org> | 2016-06-15 10:52:42 +1000 |
---|---|---|
committer | Andrew Gerrand <adg@golang.org> | 2016-06-15 03:10:47 +0000 |
commit | 0ec62565f911575beaf7d047dfe1eae2ae02bf67 (patch) | |
tree | 5cb6af62c0596ff43a0a59a9cdbabe454f9a81d2 | |
parent | c4692da9231c244a1275d42055e703b3f1dac25b (diff) | |
download | go-0ec62565f911575beaf7d047dfe1eae2ae02bf67.tar.gz go-0ec62565f911575beaf7d047dfe1eae2ae02bf67.zip |
net/http: pass through server side Transfer-Encoding headers
Fixes #16063
Change-Id: I2e8695beb657b0aef067e83f086828d8857787ed
Reviewed-on: https://go-review.googlesource.com/24130
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r-- | src/net/http/serve_test.go | 19 | ||||
-rw-r--r-- | src/net/http/server.go | 5 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go index 8e4bbdc0c4..ca30e644c3 100644 --- a/src/net/http/serve_test.go +++ b/src/net/http/serve_test.go @@ -9,6 +9,7 @@ package http_test import ( "bufio" "bytes" + "compress/gzip" "context" "crypto/tls" "encoding/json" @@ -4200,6 +4201,24 @@ func TestHandlerSetTransferEncodingChunked(t *testing.T) { } } +// https://golang.org/issue/16063 +func TestHandlerSetTransferEncodingGzip(t *testing.T) { + defer afterTest(t) + ht := newHandlerTest(HandlerFunc(func(w ResponseWriter, r *Request) { + w.Header().Set("Transfer-Encoding", "gzip") + gz := gzip.NewWriter(w) + gz.Write([]byte("hello")) + gz.Close() + })) + resp := ht.rawResponse("GET / HTTP/1.1\nHost: foo") + for _, v := range []string{"gzip", "chunked"} { + hdr := "Transfer-Encoding: " + v + 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 8ecced85db..42b6304d4f 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -1147,7 +1147,10 @@ func (cw *chunkWriter) writeHeader(p []byte) { // to avoid closing the connection at EOF. cw.chunking = true setHeader.transferEncoding = "chunked" - delHeader("Transfer-Encoding") + if hasTE && te == "chunked" { + // We will send the chunked Transfer-Encoding header later. + delHeader("Transfer-Encoding") + } } } else { // HTTP version < 1.1: cannot do chunked transfer |