Commit a48998be authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

net/http: remove invalid checks of Request.Proto* for outgoing requests

The net/http package has long documented that Request.ProtoMajor and
Request.ProtoMinor are ignored for outgoing requests (HTTP/1.1 or
HTTP/2 is always used, never HTTP/1.0). There was one part in the code
that was actually checking 1.0 vs 1.1, but it appears to have been
harmless. Remove it.

Fixes #18407

Change-Id: I362ed6c47ca2de7a2fbca917ed3e866273cfe41f
Reviewed-on: https://go-review.googlesource.com/45155
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent cfae35ef
...@@ -349,18 +349,6 @@ func (r *Request) ProtoAtLeast(major, minor int) bool { ...@@ -349,18 +349,6 @@ func (r *Request) ProtoAtLeast(major, minor int) bool {
r.ProtoMajor == major && r.ProtoMinor >= minor r.ProtoMajor == major && r.ProtoMinor >= minor
} }
// protoAtLeastOutgoing is like ProtoAtLeast, but is for outgoing
// requests (see issue 18407) where these fields aren't supposed to
// matter. As a minor fix for Go 1.8, at least treat (0, 0) as
// matching HTTP/1.1 or HTTP/1.0. Only HTTP/1.1 is used.
// TODO(bradfitz): ideally remove this whole method. It shouldn't be used.
func (r *Request) protoAtLeastOutgoing(major, minor int) bool {
if r.ProtoMajor == 0 && r.ProtoMinor == 0 && major == 1 && minor <= 1 {
return true
}
return r.ProtoAtLeast(major, minor)
}
// UserAgent returns the client's User-Agent, if sent in the request. // UserAgent returns the client's User-Agent, if sent in the request.
func (r *Request) UserAgent() string { func (r *Request) UserAgent() string {
return r.Header.Get("User-Agent") return r.Header.Get("User-Agent")
......
...@@ -99,13 +99,13 @@ func newTransferWriter(r interface{}) (t *transferWriter, err error) { ...@@ -99,13 +99,13 @@ func newTransferWriter(r interface{}) (t *transferWriter, err error) {
t.TransferEncoding = rr.TransferEncoding t.TransferEncoding = rr.TransferEncoding
t.Header = rr.Header t.Header = rr.Header
t.Trailer = rr.Trailer t.Trailer = rr.Trailer
atLeastHTTP11 = rr.protoAtLeastOutgoing(1, 1)
t.Body = rr.Body t.Body = rr.Body
t.BodyCloser = rr.Body t.BodyCloser = rr.Body
t.ContentLength = rr.outgoingLength() t.ContentLength = rr.outgoingLength()
if t.ContentLength < 0 && len(t.TransferEncoding) == 0 && atLeastHTTP11 && t.shouldSendChunkedRequestBody() { if t.ContentLength < 0 && len(t.TransferEncoding) == 0 && t.shouldSendChunkedRequestBody() {
t.TransferEncoding = []string{"chunked"} t.TransferEncoding = []string{"chunked"}
} }
atLeastHTTP11 = true // Transport requests are always 1.1 or 2.0
case *Response: case *Response:
t.IsResponse = true t.IsResponse = true
if rr.Request != nil { if rr.Request != nil {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment