diff --git a/django/http/__init__.py b/django/http/__init__.py
index ecb3912..0b13857 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -310,7 +310,7 @@ class HttpRequest(object):
         self._post_parse_error = True
 
     def _load_post_and_files(self):
-        # Populates self._post and self._files
+        """ Populates self._post and self._files if the content-type is a form type """
         if self.method != 'POST':
             self._post, self._files = QueryDict('', encoding=self._encoding), MultiValueDict()
             return
@@ -318,7 +318,7 @@ class HttpRequest(object):
             self._mark_post_parse_error()
             return
 
-        if self.META.get('CONTENT_TYPE', '').startswith('multipart'):
+        if self.META.get('CONTENT_TYPE', '').startswith('multipart/form-data'):
             if hasattr(self, '_body'):
                 # Use already read data
                 data = BytesIO(self._body)
@@ -336,8 +336,10 @@ class HttpRequest(object):
                 # empty POST
                 self._mark_post_parse_error()
                 raise
-        else:
+        elif self.META.get('CONTENT_TYPE', '').startswith('application/x-www-form-urlencoded'):
             self._post, self._files = QueryDict(self.body, encoding=self._encoding), MultiValueDict()
+        else:
+            self._post, self._files = QueryDict('', encoding=self._encoding), MultiValueDict()
 
     ## File-like and iterator interface.
     ##
diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py
index f9e1112..fc26844 100644
--- a/tests/regressiontests/requests/tests.py
+++ b/tests/regressiontests/requests/tests.py
@@ -265,6 +265,7 @@ class RequestsTests(unittest.TestCase):
     def test_stream(self):
         payload = b'name=value'
         request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/x-www-form-urlencoded',
                                'CONTENT_LENGTH': len(payload),
                                'wsgi.input': BytesIO(payload)})
         self.assertEqual(request.read(), b'name=value')
@@ -276,6 +277,7 @@ class RequestsTests(unittest.TestCase):
         """
         payload = b'name=value'
         request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/x-www-form-urlencoded',
                                'CONTENT_LENGTH': len(payload),
                                'wsgi.input': BytesIO(payload)})
         self.assertEqual(request.POST, {'name': ['value']})
@@ -289,6 +291,7 @@ class RequestsTests(unittest.TestCase):
         """
         payload = b'name=value'
         request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/x-www-form-urlencoded',
                                'CONTENT_LENGTH': len(payload),
                                'wsgi.input': BytesIO(payload)})
         self.assertEqual(request.read(2), b'na')
@@ -337,9 +340,20 @@ class RequestsTests(unittest.TestCase):
                                'wsgi.input': BytesIO(payload)})
         self.assertEqual(request.POST, {})
 
+    def test_POST_binary_only(self):
+        payload = b'\r\n\x01\x00\x00\x00ab\x00\x00\xcd\xcc,@'
+        request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/octet-stream',
+                               'CONTENT_LENGTH': len(payload),
+                               'wsgi.input': BytesIO(payload)})
+        self.assertEqual(request.POST, {})
+        self.assertEqual(request.FILES, {})
+        self.assertEqual(request.body, payload)
+
     def test_read_by_lines(self):
         payload = b'name=value'
         request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/x-www-form-urlencoded',
                                'CONTENT_LENGTH': len(payload),
                                'wsgi.input': BytesIO(payload)})
         self.assertEqual(list(request), [b'name=value'])
@@ -350,6 +364,7 @@ class RequestsTests(unittest.TestCase):
         """
         payload = b'name=value'
         request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/x-www-form-urlencoded',
                                'CONTENT_LENGTH': len(payload),
                                'wsgi.input': BytesIO(payload)})
         raw_data = request.body
@@ -362,6 +377,7 @@ class RequestsTests(unittest.TestCase):
         """
         payload = b'name=value'
         request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/x-www-form-urlencoded',
                                'CONTENT_LENGTH': len(payload),
                                'wsgi.input': BytesIO(payload)})
         raw_data = request.body
@@ -414,6 +430,7 @@ class RequestsTests(unittest.TestCase):
 
         payload = b'name=value'
         request = WSGIRequest({'REQUEST_METHOD': 'POST',
+                               'CONTENT_TYPE': 'application/x-www-form-urlencoded',
                                'CONTENT_LENGTH': len(payload),
                                'wsgi.input': ExplodingBytesIO(payload)})
 
