From 22879fc88367d77817d7d96c9164f22e55f3a192 Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Tue, 1 Feb 2022 08:51:19 +0900 Subject: [PATCH] net/http: expose "http: server gave HTTP response to HTTPS client" error Expose "http: server gave HTTP response to HTTPS client" error as ErrSchemeMismatch, so that it can be compared with errors.Is . Fixes #44855 Signed-off-by: Akihiro Suda --- api/next/44855.txt | 1 + src/net/http/client.go | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 api/next/44855.txt diff --git a/api/next/44855.txt b/api/next/44855.txt new file mode 100644 index 0000000000..89a3ff5f33 --- /dev/null +++ b/api/next/44855.txt @@ -0,0 +1 @@ +pkg net/http, var ErrSchemeMismatch error #44855 diff --git a/src/net/http/client.go b/src/net/http/client.go index 1e300acf89..2cab53a585 100644 --- a/src/net/http/client.go +++ b/src/net/http/client.go @@ -204,6 +204,9 @@ func (c *Client) transport() RoundTripper { return DefaultTransport } +// ErrSchemeMismatch is returned when a server returns an HTTP response to an HTTPS client. +var ErrSchemeMismatch = errors.New("http: server gave HTTP response to HTTPS client") + // send issues an HTTP request. // Caller should close resp.Body when done reading from it. func send(ireq *Request, rt RoundTripper, deadline time.Time) (resp *Response, didTimeout func() bool, err error) { @@ -265,7 +268,7 @@ func send(ireq *Request, rt RoundTripper, deadline time.Time) (resp *Response, d // response looks like HTTP and give a more helpful error. // See golang.org/issue/11111. if string(tlsErr.RecordHeader[:]) == "HTTP/" { - err = errors.New("http: server gave HTTP response to HTTPS client") + err = ErrSchemeMismatch } } return nil, didTimeout, err