Почему Icecast не отвечает на запрос «OPTIONS», отправленный браузерами при предполетной проверке CORS? - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю над плеером для потока 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 или я что-то упустил в конфигурации моего сервера?

...