Index: src/OFHTTPClient.h ================================================================== --- src/OFHTTPClient.h +++ src/OFHTTPClient.h @@ -101,10 +101,11 @@ { id _delegate; bool _insecureRedirectsAllowed; OFTCPSocket *_socket; OFURL *_lastURL; + bool _lastWasHEAD; OFHTTPResponse *_lastResponse; } #ifdef OF_HAVE_PROPERTIES @property (assign) id delegate; Index: src/OFHTTPClient.m ================================================================== --- src/OFHTTPClient.m +++ src/OFHTTPClient.m @@ -356,20 +356,27 @@ _socket = nil; [_lastURL release]; _lastURL = nil; - /* Throw away content that has not been read yet */ - while (![_lastResponse isAtEndOfStream]) { - char buffer[512]; - - [_lastResponse readIntoBuffer: buffer - length: 512]; - } - - [_lastResponse release]; - _lastResponse = nil; + @try { + if (!_lastWasHEAD) { + /* + * Throw away content that has not been read + * yet. + */ + while (![_lastResponse isAtEndOfStream]) { + char buffer[512]; + + [_lastResponse readIntoBuffer: buffer + length: 512]; + } + } + } @finally { + [_lastResponse release]; + _lastResponse = nil; + } } else socket = [self OF_closeAndCreateSocketForRequest: request]; /* * As a work around for a bug with split packets in lighttpd when using @@ -563,10 +570,11 @@ (keepAlive != nil && [keepAlive isEqual: @"keep-alive"])) { [response setKeepAlive: true]; _socket = [socket retain]; _lastURL = [URL copy]; + _lastWasHEAD = (method == OF_HTTP_REQUEST_METHOD_HEAD); _lastResponse = [response retain]; } /* FIXME: Case-insensitive check of redirect's scheme */ if (redirects > 0 && (status == 301 || status == 302 ||