mirror of https://github.com/golang/go.git
[release-branch.go1.16] net/http: update bundled golang.org/x/net/http2
Pull in approved backports to golang.org/x/net/http2:
64539c1 http2: don't count aborted streams as active in tests
e677a40 ipv6: OpenBSD does not appear to support multicast loopback
d8ae719 net/http2: Fix handling of expect continue
cc2f99c http2: avoid busy loop when ResponseHeaderTimeout is set
5533dda http2: avoid spurious RoundTrip error when server closes and resets stream
26ec667 http2: close conns after use when req.Close is set
By doing:
$ go get -d golang.org/x/net@internal-branch.go1.16-vendor
go: downloading golang.org/x/net v0.0.0-20211201233224-64539c132272
go get: upgraded golang.org/x/net v0.0.0-20211101194150-d8c3cde3c676 => v0.0.0-20211201233224-64539c132272
$ go mod tidy
$ go mod vendor
$ go generate -run=bundle std
Fixes #49904.
Fixes #49623.
Fixes #49661.
Fixes #49560.
Fixes #49908.
Fixes #49910.
Change-Id: I73261b189f84cf1919a79129ec36a1c187723133
Reviewed-on: https://go-review.googlesource.com/c/go/+/368594
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
This commit is contained in:
parent
0f9838eeb1
commit
b29e772caf
|
|
@ -4,7 +4,7 @@ go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
|
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
|
||||||
golang.org/x/net v0.0.0-20211101194150-d8c3cde3c676
|
golang.org/x/net v0.0.0-20211201233224-64539c132272
|
||||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88 // indirect
|
golang.org/x/sys v0.0.0-20201204225414-ed752295db88 // indirect
|
||||||
golang.org/x/text v0.3.4 // indirect
|
golang.org/x/text v0.3.4 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
||||||
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
|
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
|
||||||
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20211101194150-d8c3cde3c676 h1:HdGRNh1uWfD+9WfeSGYgD64N7Nmu3oMnSkdZAONtoU8=
|
golang.org/x/net v0.0.0-20211201233224-64539c132272 h1:yz7zX5EMX9IFSUDQtHpohPOP+fh7w1Me4FH/El1jctU=
|
||||||
golang.org/x/net v0.0.0-20211101194150-d8c3cde3c676/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20211201233224-64539c132272/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
|
|
||||||
|
|
@ -7653,9 +7653,7 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
handleResponseHeaders := func() (*Response, error) {
|
||||||
select {
|
|
||||||
case <-cs.respHeaderRecv:
|
|
||||||
res := cs.res
|
res := cs.res
|
||||||
if res.StatusCode > 299 {
|
if res.StatusCode > 299 {
|
||||||
// On error or status code 3xx, 4xx, 5xx, etc abort any
|
// On error or status code 3xx, 4xx, 5xx, etc abort any
|
||||||
|
|
@ -7680,9 +7678,24 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res, nil
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-cs.respHeaderRecv:
|
||||||
|
return handleResponseHeaders()
|
||||||
case <-cs.abort:
|
case <-cs.abort:
|
||||||
|
select {
|
||||||
|
case <-cs.respHeaderRecv:
|
||||||
|
// If both cs.respHeaderRecv and cs.abort are signaling,
|
||||||
|
// pick respHeaderRecv. The server probably wrote the
|
||||||
|
// response and immediately reset the stream.
|
||||||
|
// golang.org/issue/49645
|
||||||
|
return handleResponseHeaders()
|
||||||
|
default:
|
||||||
waitDone()
|
waitDone()
|
||||||
return nil, cs.abortErr
|
return nil, cs.abortErr
|
||||||
|
}
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
err := ctx.Err()
|
err := ctx.Err()
|
||||||
cs.abortStream(err)
|
cs.abortStream(err)
|
||||||
|
|
@ -7742,6 +7755,9 @@ func (cs *http2clientStream) writeRequest(req *Request) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cc.addStreamLocked(cs) // assigns stream ID
|
cc.addStreamLocked(cs) // assigns stream ID
|
||||||
|
if http2isConnectionCloseRequest(req) {
|
||||||
|
cc.doNotReuse = true
|
||||||
|
}
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
||||||
// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
|
// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
|
||||||
|
|
@ -7765,13 +7781,13 @@ func (cs *http2clientStream) writeRequest(req *Request) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
continueTimeout := cc.t.expectContinueTimeout()
|
continueTimeout := cc.t.expectContinueTimeout()
|
||||||
if continueTimeout != 0 &&
|
if continueTimeout != 0 {
|
||||||
!httpguts.HeaderValuesContainsToken(
|
if !httpguts.HeaderValuesContainsToken(req.Header["Expect"], "100-continue") {
|
||||||
req.Header["Expect"],
|
|
||||||
"100-continue") {
|
|
||||||
continueTimeout = 0
|
continueTimeout = 0
|
||||||
|
} else {
|
||||||
cs.on100 = make(chan struct{}, 1)
|
cs.on100 = make(chan struct{}, 1)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Past this point (where we send request headers), it is possible for
|
// Past this point (where we send request headers), it is possible for
|
||||||
// RoundTrip to return successfully. Since the RoundTrip contract permits
|
// RoundTrip to return successfully. Since the RoundTrip contract permits
|
||||||
|
|
@ -7839,6 +7855,7 @@ func (cs *http2clientStream) writeRequest(req *Request) (err error) {
|
||||||
case <-respHeaderTimer:
|
case <-respHeaderTimer:
|
||||||
return http2errTimeout
|
return http2errTimeout
|
||||||
case <-respHeaderRecv:
|
case <-respHeaderRecv:
|
||||||
|
respHeaderRecv = nil
|
||||||
respHeaderTimer = nil // keep waiting for END_STREAM
|
respHeaderTimer = nil // keep waiting for END_STREAM
|
||||||
case <-cs.abort:
|
case <-cs.abort:
|
||||||
return cs.abortErr
|
return cs.abortErr
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ golang.org/x/crypto/curve25519
|
||||||
golang.org/x/crypto/hkdf
|
golang.org/x/crypto/hkdf
|
||||||
golang.org/x/crypto/internal/subtle
|
golang.org/x/crypto/internal/subtle
|
||||||
golang.org/x/crypto/poly1305
|
golang.org/x/crypto/poly1305
|
||||||
# golang.org/x/net v0.0.0-20211101194150-d8c3cde3c676
|
# golang.org/x/net v0.0.0-20211201233224-64539c132272
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/net/dns/dnsmessage
|
golang.org/x/net/dns/dnsmessage
|
||||||
golang.org/x/net/http/httpguts
|
golang.org/x/net/http/httpguts
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue