diff options
| author | Damien Neil <dneil@google.com> | 2021-10-27 14:03:24 -0700 |
|---|---|---|
| committer | Damien Neil <dneil@google.com> | 2021-11-12 23:35:31 +0000 |
| commit | b69b2f63d65609b400b4a40ae01e4a48638f050f (patch) | |
| tree | c4d90d6d7d5a8b8d9082375794bdf146677cfbc8 /src/net/http/server.go | |
| parent | fdee1b297438a64c553ecc7468a7647f5a070404 (diff) | |
| download | go-b69b2f63d65609b400b4a40ae01e4a48638f050f.tar.xz | |
net/http: do not send Transfer-Encoding: identity in responses
Server handlers may set a "Transfer-Encoding: identity" header on
responses to disable chunking, but this header should not be sent
on the wire.
Fixes #49194.
Change-Id: I46a9e3b8ff9d93edd7d1c34d264fc309fa322ad5
Reviewed-on: https://go-review.googlesource.com/c/go/+/359176
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/net/http/server.go')
| -rw-r--r-- | src/net/http/server.go | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/net/http/server.go b/src/net/http/server.go index c4a2d57dd4..f0b0e86e91 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -1426,11 +1426,11 @@ func (cw *chunkWriter) writeHeader(p []byte) { hasCL = false } - if w.req.Method == "HEAD" || !bodyAllowedForStatus(code) { - // do nothing - } else if code == StatusNoContent { + if w.req.Method == "HEAD" || !bodyAllowedForStatus(code) || code == StatusNoContent { + // Response has no body. delHeader("Transfer-Encoding") } else if hasCL { + // Content-Length has been provided, so no chunking is to be done. delHeader("Transfer-Encoding") } else if w.req.ProtoAtLeast(1, 1) { // HTTP/1.1 or greater: Transfer-Encoding has been set to identity, and no @@ -1441,6 +1441,7 @@ func (cw *chunkWriter) writeHeader(p []byte) { if hasTE && te == "identity" { cw.chunking = false w.closeAfterReply = true + delHeader("Transfer-Encoding") } else { // HTTP/1.1 or greater: use chunked transfer encoding // to avoid closing the connection at EOF. |
