From 1eb38eed083ad61491771ad221850ff6cc1ef1fa Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Sat, 9 May 2009 22:16:37 +0000 Subject: - Patch #280240 by c960657: don't add content length when there is no content in the request. --- includes/common.inc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'includes') diff --git a/includes/common.inc b/includes/common.inc index a292c30cc..46d320d54 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -522,7 +522,6 @@ function drupal_http_request($url, array $options = array()) { // Merge the default headers. $options['headers'] += array( 'User-Agent' => 'Drupal (+http://drupal.org/)', - 'Content-Length' => strlen($options['data']), ); // RFC 2616: "non-standard ports MUST, default ports MAY be included". @@ -530,7 +529,15 @@ function drupal_http_request($url, array $options = array()) { // 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 + // Only add Content-Length if we actually have any content or if it is a POST + // or PUT request. Some non-standard servers get confused by Content-Length in + // at least HEAD/GET requests, and Squid always requires Content-Length in + // POST/PUT requests. + if (!empty($options['data']) || $options['method'] == 'POST' || $options['method'] == 'PUT') { + $options['headers']['Content-Length'] = strlen($options['data']); + } + + // 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'] : '')); } -- cgit v1.2.3