add support for the HTTP CONNECT method (#2761)

This commit is contained in:
klzgrad
2020-09-10 19:05:55 +08:00
committed by GitHub
parent c5a132f158
commit c81eeb8bb8
2 changed files with 49 additions and 5 deletions

View File

@@ -37,13 +37,28 @@ func requestFromHeaders(headers []qpack.HeaderField) (*http.Request, error) {
httpHeaders.Set("Cookie", strings.Join(httpHeaders["Cookie"], "; "))
}
if len(path) == 0 || len(authority) == 0 || len(method) == 0 {
isConnect := method == http.MethodConnect
if isConnect {
if path != "" || authority == "" {
return nil, errors.New(":path must be empty and :authority must not be empty")
}
} else if len(path) == 0 || len(authority) == 0 || len(method) == 0 {
return nil, errors.New(":path, :authority and :method must not be empty")
}
u, err := url.ParseRequestURI(path)
if err != nil {
return nil, err
var u *url.URL
var requestURI string
var err error
if isConnect {
u = &url.URL{Host: authority}
requestURI = authority
} else {
u, err = url.ParseRequestURI(path)
if err != nil {
return nil, err
}
requestURI = path
}
var contentLength int64
@@ -64,7 +79,7 @@ func requestFromHeaders(headers []qpack.HeaderField) (*http.Request, error) {
Body: nil,
ContentLength: contentLength,
Host: authority,
RequestURI: path,
RequestURI: requestURI,
TLS: &tls.ConnectionState{},
}, nil
}