Update the Host field in the request header

This update checks for the 'Host' value in the request header, specifically assigning it to 'u.Host' if no value is found. This same logic is applied to 'cfg.ServerName'. The aim of this change is to ensure a correct 'Host' value is used throughout, addressing a bug related to setting the 'Host' field of the header.
This commit is contained in:
willard 2023-10-08 22:29:10 +08:00
parent 666c197fc9
commit 873ca6009f
1 changed files with 10 additions and 2 deletions

View File

@ -189,6 +189,10 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
return nil, nil, errMalformedURL
}
host := requestHeader.Get("Host")
if host == "" {
host = u.Host
}
req := &http.Request{
Method: http.MethodGet,
URL: u,
@ -196,7 +200,7 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
ProtoMajor: 1,
ProtoMinor: 1,
Header: make(http.Header),
Host: u.Host,
Host: host,
}
req = req.WithContext(ctx)
@ -347,7 +351,11 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
cfg := cloneTLSConfig(d.TLSClientConfig)
if cfg.ServerName == "" {
cfg.ServerName = hostNoPort
if host != "" {
cfg.ServerName = host
} else {
cfg.ServerName = hostNoPort
}
}
tlsConn := tls.Client(netConn, cfg)
netConn = tlsConn