net/http: fix Content-Length/Transfer-Encoding on HEAD requests
net/http currently assumes that the response to a HEAD request will always have a Content-Length header. This is incorrect. RFC2616 says: "The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification." This means that three cases are possible: a Content-Length header, a Transfer-Encoding header or neither. In the wild the following sites exhibit these behaviours (curl -I): HEAD on http://www.google.co.uk/ has Transfer-Encoding: chunked HEAD on http://www.bbc.co.uk/ has Content-Length: 45247 HEAD on http://edition.cnn.com/ has neither header This patch does not remove the ErrMissingContentLength error for compatibility reasons, but it is no longer used. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/7182045
Showing
Please
register
or
sign in
to comment