diff options
author | Meng Zhuo <mengzhuo1203@gmail.com> | 2018-11-27 16:16:43 +0800 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2018-11-28 21:33:21 +0000 |
commit | 9aadbf5755dc8e3c3b0a224f513c92b804a1a3a7 (patch) | |
tree | b2f0bece0b962e59469027ee43a86c52a08c8009 /src/net/http/request.go | |
parent | 4f15b54780af7159732794f9d67c9a8a455bbf61 (diff) | |
download | go-9aadbf5755dc8e3c3b0a224f513c92b804a1a3a7.tar.gz go-9aadbf5755dc8e3c3b0a224f513c92b804a1a3a7.zip |
net/http: prevent transport sends two "Connection: close" headers
There are three functions that do Connection header write:
1. transport.go/ persistConn.roundTrip
2. transfer.go/ transferWriter.writeHeader
3. request.go/ Request.write
The root cause is roundTrip didn't lookup into request.Close and
transferWriter
didn't take care of extraHeaders.
Fixes #28886
Change-Id: I1d131019c7cd42eb1bcc972c631b7df7511c1f39
Reviewed-on: https://go-review.googlesource.com/c/150722
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/net/http/request.go')
-rw-r--r-- | src/net/http/request.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/net/http/request.go b/src/net/http/request.go index 5b7e6564ae..d994e81d23 100644 --- a/src/net/http/request.go +++ b/src/net/http/request.go @@ -1330,6 +1330,9 @@ func (r *Request) wantsHttp10KeepAlive() bool { } func (r *Request) wantsClose() bool { + if r.Close { + return true + } return hasToken(r.Header.get("Connection"), "close") } |