Description
What version of Go are you using (go version
)?
$ go version go version go1.16.2 darwin/amd64
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="auto" GOARCH="amd64" GOBIN="" GOCACHE="/Users/xx/Library/Caches/go-build" GOENV="/Users/xx/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Users/xx/code/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/xx/code/go" GOPRIVATE="" GOPROXY="https://goproxy.io,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GOVCS="" GOVERSION="go1.16.2" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/Users/xx/code/go/src/go/src/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/3f/x8jl0lgx629d_5bz0537gxnm0000gn/T/go-build908271374=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
I noticed that http.readRequest
has a param called deleteHostHeader
to control whether to delete the Host
of Request.Header
. It seems to be designed so that http.ReadRequest
can skip the Host
check.
But if http.ReadRequest
sets deleteHostHeader
to true, the first Host
Header is read in readRequest
and the Host
Header is deleted, which makes http.ReadRequest
lose the rest of the Host Header.
I don't understand whether the processing of the Host Header is to be skipped, or the Host Header needs to be check and return error when there is multi Host Header. So I think the processing here can be more clear.
related to #45463
What did you expect to see?
Clear processing strategy for multiple Host
Headers. For example, http.Request
do not delete the Host
Header, or reject multiple Host
Header Requests
What did you see instead?
http.Request
do not check the Host
Header and delete the Host in the Header after getting the first Host
Header