diff --git a/includes/common.inc b/includes/common.inc
index 72b68a631b3ce4529da289eebf49e9d655612f14..76637a4c7355797da2d7ba386fd4b850b22864af 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -521,14 +521,15 @@ function drupal_http_request($url, array $options = array()) {
 
   // Merge the default headers.
   $options['headers'] += array(
-    // RFC 2616: "non-standard ports MUST, default ports MAY be included".
-    // We don't add the port to prevent from breaking rewrite rules checking the
-    // host that do not take into account the port number.
-    'Host' => $host,
     'User-Agent' => 'Drupal (+http://drupal.org/)',
     'Content-Length' => strlen($options['data']),
   );
 
+  // RFC 2616: "non-standard ports MUST, default ports MAY be included".
+  // We don't add the standard port to prevent from breaking rewrite rules
+  // checking the host that do not take into account the port number.
+  $options['headers']['Host'] = $host;
+
   // If the server url has a user then attempt to use basic authentication
   if (isset($uri['user'])) {
     $options['headers']['Authorization'] = 'Basic ' . base64_encode($uri['user'] . (!empty($uri['pass']) ? ":" . $uri['pass'] : ''));
@@ -544,13 +545,11 @@ function drupal_http_request($url, array $options = array()) {
     $options['headers']['User-Agent'] = $matches[0];
   }
 
+  $request = $options['method'] . ' ' . $path . " HTTP/1.0\r\n";
   foreach ($options['headers'] as $name => $value) {
-    $options['headers'][$name] = $name . ': ' . trim($value);
+    $request .= $name . ': ' . trim($value) . "\r\n";
   }
-
-  $request = $options['method'] . ' ' . $path . " HTTP/1.0\r\n";
-  $request .= implode("\r\n", $options['headers']);
-  $request .= "\r\n\r\n" . $options['data'];
+  $request .= "\r\n" . $options['data'];
   $result->request = $request;
 
   fwrite($fp, $request);