I expected to see that setting a Host: header actually sends hosts and sets req.Host map[Accept-Encoding:[gzip] Host:[example.com] User-Agent:[My Test User Agent 1.1]]
What did you see instead?
I see that it just sets Hosts from url and uses req.Host if exists. map[Accept-Encoding:[gzip] Host:[127.0.0.1:2] User-Agent:[My Test User Agent 1.1]]
I see some closed issues, but I have a few more words about it, It is documented that we need to set .Host to send host header and there are few more headers that calculated in request.write but for example User-Agent is being overwritten but it does not do this for Host. https://github.com/golang/go/blob/master/src/net/http/request.go#L553 on this comment we see that it says
// Find the target host. Prefer the Host: header, but if that
// is not given, use the host from the request URL.
but it does not even look at host header.
The text was updated successfully, but these errors were encountered:
// For client requests, the URL's Host specifies the server to
// connect to, while the Request's Host field optionally
// specifies the Host header value to send in the HTTP
We could document that more on Request.Header and Request.Host too.
You're proposing to add a third level in there (Request.Header["Host"]) between the Request.Host and Request.URL.Host. That might be intuitive to some, but it's also just more complexity and compatibility support to maintain going forward. (And might catch other implementations by surprise?)