diff --git a/apiclient/http.py b/apiclient/http.py
index 31a1c44..f518d87 100644
--- a/apiclient/http.py
+++ b/apiclient/http.py
@@ -508,8 +508,6 @@
     self._progress = 0
     self._total_size = None
     self._done = False
-    self._original_follow_redirects = request.http.follow_redirects
-    request.http.follow_redirects = False
 
     # Stubs for testing.
     self._sleep = time.sleep
@@ -551,10 +549,9 @@
       if resp.status < 500:
         break
 
-    if resp.status in [301, 302, 303, 307, 308] and 'location' in resp:
-        self._uri = resp['location']
-        resp, content = http.request(self._uri, headers=headers)
     if resp.status in [200, 206]:
+      if 'content-location' in resp and resp['content-location'] != self._uri:
+        self._uri = resp['content-location']
       self._progress += len(content)
       self._fd.write(content)
 
@@ -565,7 +562,6 @@
 
       if self._progress == self._total_size:
         self._done = True
-        self._request.http.follow_redirects = self._original_follow_redirects
       return MediaDownloadProgress(self._progress, self._total_size), self._done
     else:
       raise HttpError(resp, content, uri=self._uri)
diff --git a/tests/test_http.py b/tests/test_http.py
index 7d6fff7..4ef0dfb 100644
--- a/tests/test_http.py
+++ b/tests/test_http.py
@@ -350,32 +350,27 @@
     self.assertEqual(0, download._progress)
     self.assertEqual(None, download._total_size)
     self.assertEqual(False, download._done)
-    self.assertEqual(True, download._original_follow_redirects)
     self.assertEqual(self.request.uri, download._uri)
 
     status, done = download.next_chunk()
 
     self.assertEqual(self.fd.getvalue(), '123')
     self.assertEqual(False, done)
-    self.assertEqual(False, self.request.http.follow_redirects)
     self.assertEqual(3, download._progress)
     self.assertEqual(5, download._total_size)
     self.assertEqual(3, status.resumable_progress)
-    self.assertEqual(True, download._original_follow_redirects)
 
     status, done = download.next_chunk()
 
-    self.assertEqual(True, download._original_follow_redirects)
     self.assertEqual(self.fd.getvalue(), '12345')
     self.assertEqual(True, done)
-    self.assertEqual(True, self.request.http.follow_redirects)
     self.assertEqual(5, download._progress)
     self.assertEqual(5, download._total_size)
 
   def test_media_io_base_download_handle_redirects(self):
     self.request.http = HttpMockSequence([
-      ({'status': '307',
-        'location': 'https://secure.example.net/lion'}, ''),
+      ({'status': '200',
+        'content-location': 'https://secure.example.net/lion'}, ''),
       ({'status': '200',
         'content-range': '0-2/5'}, 'abc'),
     ])
@@ -386,10 +381,6 @@
     status, done = download.next_chunk()
 
     self.assertEqual('https://secure.example.net/lion', download._uri)
-    self.assertEqual(self.fd.getvalue(), 'abc')
-    self.assertEqual(False, done)
-    self.assertEqual(3, download._progress)
-    self.assertEqual(5, download._total_size)
 
   def test_media_io_base_download_handle_4xx(self):
     self.request.http = HttpMockSequence([
