ServeMux depends on having a URL
in order to mux. It might be that the right
fix is to have CONNECT handlers just not
look at URL.
««« original CL description
http: do not parse req.URL for CONNECT
CONNECT's argument is not a URL.
R=golang-dev, bradfitz, rsc
CC=golang-dev
https://golang.org/cl/
4808044
»»»
TBR=bradfitz
CC=golang-dev
https://golang.org/cl/
4798046
noBody,
"parse : empty url",
},
-
- // CONNECT method.
- {
- "CONNECT proxy.example.com:443 HTTP/1.0\r\n" +
- "Host: proxy.example.com\r\n\r\n",
-
- &Request{
- Method: "CONNECT",
- RawURL: "proxy.example.com:443",
- URL: nil,
- Proto: "HTTP/1.0",
- ProtoMajor: 1,
- ProtoMinor: 0,
- Close: false,
- ContentLength: 0,
- Host: "proxy.example.com",
- Form: Values{},
- },
-
- noBody,
- noError,
- },
}
func TestReadRequest(t *testing.T) {
return nil, &badStringError{"malformed HTTP version", req.Proto}
}
- isConnect := strings.ToUpper(req.Method) == "CONNECT"
- if !isConnect {
- if req.URL, err = ParseRequestURL(req.RawURL); err != nil {
- return nil, err
- }
+ if req.URL, err = ParseRequestURL(req.RawURL); err != nil {
+ return nil, err
}
// Subsequent lines: Key: value.
// GET http://www.google.com/index.html HTTP/1.1
// Host: doesntmatter
// the same. In the second case, any Host line is ignored.
- if !isConnect {
- req.Host = req.URL.Host
- }
+ req.Host = req.URL.Host
if req.Host == "" {
req.Host = req.Header.Get("Host")
}