Do not read response body for HEAD requests
Co-authored-by: Romain <rtribotte@users.noreply.github.com>
This commit is contained in:
parent
ad99c5bbea
commit
0528c054a6
3 changed files with 46 additions and 6 deletions
|
@ -20,8 +20,9 @@ import (
|
|||
// rwWithUpgrade contains a ResponseWriter and an upgradeHandler,
|
||||
// used to upgrade the connection (e.g. Websockets).
|
||||
type rwWithUpgrade struct {
|
||||
RW http.ResponseWriter
|
||||
Upgrade upgradeHandler
|
||||
ReqMethod string
|
||||
RW http.ResponseWriter
|
||||
Upgrade upgradeHandler
|
||||
}
|
||||
|
||||
// conn is an enriched net.Conn.
|
||||
|
@ -211,6 +212,10 @@ func (c *conn) handleResponse(r rwWithUpgrade) error {
|
|||
|
||||
r.RW.WriteHeader(res.StatusCode())
|
||||
|
||||
if noResponseBodyExpected(r.ReqMethod) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if res.Header.ContentLength() == 0 {
|
||||
return nil
|
||||
}
|
||||
|
@ -444,8 +449,8 @@ func (c *connPool) askForNewConn(errCh chan<- error) {
|
|||
c.releaseConn(newConn)
|
||||
}
|
||||
|
||||
// isBodyAllowedForStatus reports whether a given response status code
|
||||
// permits a body. See RFC 7230, section 3.3.
|
||||
// isBodyAllowedForStatus reports whether a given response status code permits a body.
|
||||
// See RFC 7230, section 3.3.
|
||||
// From https://github.com/golang/go/blame/master/src/net/http/transfer.go#L459
|
||||
func isBodyAllowedForStatus(status int) bool {
|
||||
switch {
|
||||
|
@ -458,3 +463,9 @@ func isBodyAllowedForStatus(status int) bool {
|
|||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// noResponseBodyExpected reports whether a given request method permits a body.
|
||||
// From https://github.com/golang/go/blame/master/src/net/http/transfer.go#L250
|
||||
func noResponseBodyExpected(requestMethod string) bool {
|
||||
return requestMethod == "HEAD"
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue