diff --git a/scrapy/downloadermiddlewares/httpcompression.py b/scrapy/downloadermiddlewares/httpcompression.py index 7ab304c17..bcf20f10c 100644 --- a/scrapy/downloadermiddlewares/httpcompression.py +++ b/scrapy/downloadermiddlewares/httpcompression.py @@ -20,6 +20,9 @@ class HttpCompressionMiddleware(object): request.headers.setdefault('Accept-Encoding', 'gzip,deflate') def process_response(self, request, response, spider): + + if request.method == 'HEAD': + return response if isinstance(response, Response): content_encoding = response.headers.getlist('Content-Encoding') if content_encoding and not is_gzipped(response): diff --git a/tests/test_downloadermiddleware_httpcompression.py b/tests/test_downloadermiddleware_httpcompression.py index 2e6e47fef..24955a515 100644 --- a/tests/test_downloadermiddleware_httpcompression.py +++ b/tests/test_downloadermiddleware_httpcompression.py @@ -144,3 +144,13 @@ class HttpCompressionTest(TestCase): self.assertIs(newresponse, response) self.assertEqual(response.headers['Content-Encoding'], b'gzip') self.assertEqual(response.headers['Content-Type'], b'application/gzip') + + def test_process_response_head_request_no_decode_required(self): + response = self._getresponse('gzip') + response.headers['Content-Type'] = 'application/gzip' + request = response.request + request.method = 'HEAD' + response = response.replace(body = None) + newresponse = self.mw.process_response(request, response, self.spider) + self.assertIs(newresponse, response) + self.assertEquals(response.body, b'')