diff --git a/django/views/decorators/http.py b/django/views/decorators/http.py index df4e165066a..bfb68295d16 100644 --- a/django/views/decorators/http.py +++ b/django/views/decorators/http.py @@ -139,7 +139,7 @@ def condition(etag_func=None, last_modified_func=None): } ) response = HttpResponse(status=412) - elif (not if_none_match and request.method == "GET" and + elif (not if_none_match and request.method in ("GET", "HEAD") and res_last_modified and if_modified_since and res_last_modified <= if_modified_since): response = HttpResponseNotModified() diff --git a/tests/conditional_processing/tests.py b/tests/conditional_processing/tests.py index 934ca5c4ec9..72dd1dd48cc 100644 --- a/tests/conditional_processing/tests.py +++ b/tests/conditional_processing/tests.py @@ -124,6 +124,11 @@ class ConditionalGet(TestCase): response = self.client.get('/condition/last_modified2/') self.assertFullResponse(response, check_etag=False) + def test_single_condition_head(self): + self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR + response = self.client.head('/condition/') + self.assertNotModified(response) + def test_invalid_etag(self): self.client.defaults['HTTP_IF_NONE_MATCH'] = r'"\"' response = self.client.get('/condition/etag/')