• John Graham-Cumming's avatar
    net/http: fix Content-Length/Transfer-Encoding on HEAD requests · 3c77b896
    John Graham-Cumming authored
    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
    3c77b896
transfer.go 16.7 KB