mirror of
https://github.com/golang/go
synced 2024-11-25 05:57:57 -07:00
http: do TLS handshake explicitly before copying TLS state
Previously we were snapshotting the TLS state into *Request before we did the HTTP ReadRequest, the first Read of which triggered the TLS handshake implicitly. Fixes #1956 R=golang-dev, rsc CC=agl, golang-dev https://golang.org/cl/4630072
This commit is contained in:
parent
9843ca5e2b
commit
7e29f1add8
@ -522,7 +522,12 @@ func TestHeadResponses(t *testing.T) {
|
||||
|
||||
func TestTLSServer(t *testing.T) {
|
||||
ts := httptest.NewTLSServer(HandlerFunc(func(w ResponseWriter, r *Request) {
|
||||
fmt.Fprintf(w, "tls=%v", r.TLS != nil)
|
||||
if r.TLS != nil {
|
||||
w.Header().Set("X-TLS-Set", "true")
|
||||
if r.TLS.HandshakeComplete {
|
||||
w.Header().Set("X-TLS-HandshakeComplete", "true")
|
||||
}
|
||||
}
|
||||
}))
|
||||
defer ts.Close()
|
||||
if !strings.HasPrefix(ts.URL, "https://") {
|
||||
@ -530,20 +535,17 @@ func TestTLSServer(t *testing.T) {
|
||||
}
|
||||
res, err := Get(ts.URL)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
t.Fatal(err)
|
||||
}
|
||||
if res == nil {
|
||||
t.Fatalf("got nil Response")
|
||||
}
|
||||
if res.Body == nil {
|
||||
t.Fatalf("got nil Response.Body")
|
||||
defer res.Body.Close()
|
||||
if res.Header.Get("X-TLS-Set") != "true" {
|
||||
t.Errorf("expected X-TLS-Set response header")
|
||||
}
|
||||
body, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if e, g := "tls=true", string(body); e != g {
|
||||
t.Errorf("expected body %q; got %q", e, g)
|
||||
if res.Header.Get("X-TLS-HandshakeComplete") != "true" {
|
||||
t.Errorf("expected X-TLS-HandshakeComplete header")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,6 +152,7 @@ func newConn(rwc net.Conn, handler Handler) (c *conn, err os.Error) {
|
||||
c.buf = bufio.NewReadWriter(br, bw)
|
||||
|
||||
if tlsConn, ok := rwc.(*tls.Conn); ok {
|
||||
tlsConn.Handshake()
|
||||
c.tlsState = new(tls.ConnectionState)
|
||||
*c.tlsState = tlsConn.ConnectionState()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user