Я работаю над плеером для потока Icecast и пытаюсь получить метаданные из потока. Плеер будет на example.fm
, а поток на stream.example.fm/93.mp3
.
В соответствии с документацией Icecast мне нужно включить заголовок Icy-MetaData: 1
в запрос для получения метаданных в потоке. Проблема возникает, когда я включаю этот заголовок.
Простая выборка работает, но не с заголовком
Простой запрос, такой как fetch("https://stream.example.fm/96.mp3")
, возвращает действительный ответ 200.
Но этот код не работает:
let Heads = new Headers({
"Icy-MetaData": "1"
});
fetch("https://stream.example.fm/96.mp3", {
headers: Heads
})
Проверка заголовков сервера
Превышение curl -H "Icy-MetaData: 1" -v "https://stream.example.fm/96.mp3" >/dev/null
подтверждает, что
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Icy-MetaData
присутствуют в заголовках потокового сервера.
Preflight Check
Проблема, похоже, связана с запросом «OPTIONS», который браузеры отправляют для проверки перед полетом. Пользовательский заголовок вызывает это. Я сделал тест, используя curl:
curl -i -X OPTIONS https://stream.example.fm/96.mp3 -H 'Access-Control-Request-Method: GET' -H 'Access-Control-Request-Headers: icy-metadata' -H 'Origin: https://example.fm'
И я получаю ошибку:
curl: (52) Пустой ответ от сервера
Is это ошибка Icecast или я что-то упустил в конфигурации моего сервера?