diff --git a/core/includes/common.inc b/core/includes/common.inc
index ff2fcb3..35bba0b 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -1021,6 +1021,26 @@ function drupal_http_request($url, array $options = array()) {
       }
       elseif ($options['max_redirects']) {
         // Redirect to the new location.
+        // Many sites don't stick to HTTP/1.1 standard and throw an incomplete
+        // Location.
+        // In such case, build a fully qualified URL location before recursing.
+        $redirect_uri = @parse_url($location);
+        if (empty($redirect_uri['host'])) {
+          // Get rid of the query string and tokenize the original URL on slash.
+          $cut_query = explode('?', $url);
+          $slash_tokened_url = explode('/', $cut_query[0]);
+          if (drupal_substr($location, 0, 1) == '/') {
+            // Redirect location starts with a slash.
+            // Cut to 3rd slash (two after scheme then first after host).
+            $location_base = implode('/', array_slice($slash_tokened_url, 0, 3));
+          }
+          else {
+            // Relative path.
+            array_pop($slash_tokened_url);
+            $location_base = implode('/', $slash_tokened_url) . '/';
+          }
+          $location = $location_base . $location;
+        }
         $options['max_redirects']--;
         $result = drupal_http_request($location, $options);
         $result->redirect_code = $code;
