Content-Range работает в Safari, но не в Chrome

Я передаю аудиофайлы с сервера Node.js Express с помощью Content-Range заголовки плюс нет заголовков кэширования. Это работает нормально в последнем Safari, но не в Chrome.

Хотя при потоковой передаче полного аудиофайла с HTTP 200мои заголовки были

{ 'Content-Length': 4724126,
  'Content-Type': 'audio/mpeg',
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
  'Access-Control-Allow-Headers': 'POST, GET, OPTIONS',
  Expires: 0,
  Pragma: 'no-cache',
  'Cache-Control': 'no-cache, no-store, must-revalidate' }

и это работает как на Chrome и Safari <audio> тег.

При потоковой передаче частичного содержимого по HTTP 206 заголовки

{ 'Content-Length': 4724126,
  'Content-Type': 'audio/mpeg',
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
  'Access-Control-Allow-Headers': 'POST, GET, OPTIONS',
  Expires: 0,
  Pragma: 'no-cache',
  'Cache-Control': 'no-cache, no-store, must-revalidate',
  'Accept-Ranges': 'bytes',
  'Content-Range': 'bytes 120515-240260/4724126' }

Это привело к ошибке на странице Chrome, где <audio> или же <video> тег был.

Даже встроенный медиа-тег, созданный Chrome при использовании потокового URL прямо в браузере, не работает, и это привело к этому

введите описание изображения здесь

Аудиофайл подается на чтение локального файла и создание потока чтения файла через Node.js. createReadStream апи:

var file = fs.createReadStream(path, {start: range[0], end: range[1]});

Я разместил код для сервера здесь.

[ОБНОВИТЬ]

Оказывается, что Chrome не является более строгим Range а также Content-Range запросы / ответы. Так что любой Content-Range ответ должен иметь Range предыдущий запрос. Типичным случаем является очистка панели игрока ко второму S. API отправит "Range" на запрос сервер ответит заголовком "Content-Range". В моем случае я отправлял Content-Range ответ на обычный запрос без "Range", Сафари работает, потому что это больше street-html жалоба, т.е. она не требует строго "Range" запрос перед "Content-Range" ответ. Итак, я удалил заголовок "Content-Range" из моего ответа, и он не работает. Конец истории (!).

Чтобы ответить на этот вопрос, я также разместил сообщение на форуме Chromium net-dev в Chrome bad. Заголовок диапазона: Range: bytes=0-

0 ответов

Другие вопросы по тегам