private function prepareRequestHeader($uri, $http_method, $media_type, $metadata = null)
 {
     $headers = array();
     // 1. Format date
     $date = $this->getCurrentGMTTime();
     $headers[Common::DATE] = $date;
     // 2. Set content type
     if ($media_type != NULL && !empty($media_type)) {
         $headers[Common::CONTENT_TYPE] = $media_type;
     }
     if ($metadata != null) {
         foreach ($metadata->getRawMetadata() as $key => $value) {
             $headers[$key] = $value;
         }
     }
     // 3. Set authorization information
     $sign_uri = substr($uri, strpos($uri, "/", strpos($uri, ":") + 3));
     $signature = Signer::signToBase64($http_method, $sign_uri, $headers, $this->credential->getGalaxyAccessSecret(), self::SIGN_ALGORITHM);
     $auth_string = "Galaxy-V2 " . $this->credential->getGalaxyAccessId() . ":" . $signature;
     $headers[Common::AUTHORIZATION] = $auth_string;
     return $headers;
 }