1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:54:40 -07:00

net/http/httputil: set HOST header always

According to RFC2616, all request messages must have HOST header.

> A client MUST include a Host header field in all HTTP/1.1 request messages .

https://www.rfc-editor.org/rfc/rfc2616#section-14.23
This commit is contained in:
Fumiaki MATSUSHIMA 2022-10-20 17:18:47 +09:00
parent a343f4017b
commit 6909bca6b1
No known key found for this signature in database
GPG Key ID: 01EF198499B2C0E1
3 changed files with 9 additions and 13 deletions

View File

@ -243,15 +243,9 @@ func DumpRequest(req *http.Request, body bool) ([]byte, error) {
fmt.Fprintf(&b, "%s %s HTTP/%d.%d\r\n", valueOrDefault(req.Method, "GET"),
reqURI, req.ProtoMajor, req.ProtoMinor)
absRequestURI := strings.HasPrefix(req.RequestURI, "http://") || strings.HasPrefix(req.RequestURI, "https://")
if !absRequestURI {
host := req.Host
if host == "" && req.URL != nil {
host = req.URL.Host
}
if host != "" {
fmt.Fprintf(&b, "Host: %s\r\n", host)
}
_, ok := req.Header["Host"]
if ok {
fmt.Fprintf(&b, "Host: %s\r\n", req.Header.Get("Host"))
}
chunked := len(req.TransferEncoding) > 0 && req.TransferEncoding[0] == "chunked"

View File

@ -18,6 +18,7 @@ import (
"strings"
"testing"
"time"
_ "unsafe"
)
type eofReader struct{}
@ -57,7 +58,6 @@ var dumpTests = []dumpTest{
Body: []byte("abcdef"),
WantDump: "GET /search HTTP/1.1\r\n" +
"Host: www.google.com\r\n" +
"Transfer-Encoding: chunked\r\n\r\n" +
chunk("abcdef") + chunk(""),
},
@ -151,7 +151,6 @@ var dumpTests = []dumpTest{
"Accept-Encoding: gzip\r\n\r\n" +
strings.Repeat("a", 8193),
WantDump: "POST / HTTP/1.1\r\n" +
"Host: post.tld\r\n" +
"Content-Length: 8193\r\n\r\n" +
strings.Repeat("a", 8193),
},
@ -383,8 +382,11 @@ func mustNewRequest(method, url string, body io.Reader) *http.Request {
return req
}
//go:linkname readRequest net/http.readRequest
func readRequest(b *bufio.Reader) (*http.Request, error)
func mustReadRequest(s string) *http.Request {
req, err := http.ReadRequest(bufio.NewReader(strings.NewReader(s)))
req, err := readRequest(bufio.NewReader(strings.NewReader(s)))
if err != nil {
panic(err)
}

View File

@ -47,7 +47,7 @@ func ExampleDumpRequest() {
fmt.Printf("%s", b)
// Output:
// "POST / HTTP/1.1\r\nHost: www.example.org\r\nAccept-Encoding: gzip\r\nContent-Length: 75\r\nUser-Agent: Go-http-client/1.1\r\n\r\nGo is a general-purpose language designed with systems programming in mind."
// "POST / HTTP/1.1\r\nAccept-Encoding: gzip\r\nContent-Length: 75\r\nUser-Agent: Go-http-client/1.1\r\n\r\nGo is a general-purpose language designed with systems programming in mind."
}
func ExampleDumpRequestOut() {