diff --git a/django/views/decorators/http.py b/django/views/decorators/http.py
index df4e165066..bfb68295d1 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 934ca5c4ec..72dd1dd48c 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/')