Google Chrome не выполняет запрос, если установлен заголовок Partial Content

Я пытаюсь передать mp3-файл в SoundManager с заголовком HTTP / 1.1 Partial Content, чтобы обеспечить некоторую защиту моих медиафайлов, а также разрешить пользователям искать разные места в треке. Код, который я использую в IE7-10, Firefox, Safari и Opera, но отказывается работать в Google Chrome. Если бы я должен был удалить заголовок Partial Content, он будет воспроизводить файл, но не позволит пользователю искать.

При просмотре вкладки сети в инструментах разработчика Chrome есть 2 запроса, один застрял в состоянии ожидания, а другой имеет статус отмены. оба этих запроса имеют размер 13B. Файл, который я пытаюсь воспроизвести, – 9.11MB.

Ниже приведен код, который я использую, чтобы установить заголовки и прочитать файл.

$name = $_GET['name']; $file_size = filesize($file); $file = "C:\xampp\htdocs\..\protected\music\testsong.mp3"; // song, user and all other checks are performed before this to get the file path. $etag = md5(uniqid(rand(), true)); $open_file = fopen($file, 'rb'); if( !$open_file ) throw new Exception('Could not open file'); $start = 0; $end = $file_size - 1; if( isset($_SERVER['HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE']) ) { $range = explode('-', substr($_SERVER['HTTP_RANGE'], strlen('bytes='))); $start = $range[0]; if( $range[1] > 0 ) $end = $range[1]; header('HTTP/1.1 206 Partial Content'); header('Status: 206'); header('Accept-Ranges: bytes'); header('Content-Range: ' . $_SERVER['HTTP_RANGE'] . '/' . $file_size); header('Content-Length: ' . ($end - $start + 1)); } else header('Content-Length: ' . $file_size); header('Content-Type: ' . $content_type); if( $download ) header('Content-Disposition: attachment; filename="' . $name . '"'); header('Last-Modified: ' . date('D, d MYH:i:s \G\M\T', filemtime($file))); header('ETag: "' . $etag . '"'); header('Expires: 0'); header('Pragma: no-cache'); header('Cache-Control: must-revalidate'); if( $start > 0 ) fseek($open_file, $start); $bytes_position = $start; while( !feof($open_file) && $bytes_position <= $end ) { if( connection_aborted() || connection_status() != 0 ) throw New Exception('Connection Aborted'); $chunk = 1048000; if( $bytes_position + $chunk > $end + 1 ) $chunk = $end - $bytes_position + 1; $chunk = fread($open_file, $chunk); if( !$chunk ) throw New Exception('Could not read file'); print($chunk); flush(); $bytes_position += $chunk; } fclose($open_file); 

Я уверен, что проблема, с которой вы столкнулись, связана с заголовком контента

попробуйте это вместо этого

 header('Content-Range: bytes ' . $start . '-' . $end . '/' . $file_size);