Icecast2 — как добавить заголовок access-control-allow-origin?

Я пытаюсь транслировать музыку с моего сервера icecast2, используя Dancer.js, который использует XHR.

Однако в настоящее время я получаю сообщение об ошибке (заменив фактический домен на example.com):

XMLHttpRequest cannot load http://example.com:8000/stream.ogg. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.com' is therefore not allowed access.

Я искал информацию о том, как добавить пользовательские заголовки в поток, но не смог найти никакой информации об этом.

Как добавить в этот поток заголовок access-control-allow-origin?

Я видел, как некоторые ответы говорили мне добавить его в конфигурацию apache или .htaccess, но, поскольку это не использует службу apache, это не сработает.

Спасибо.


person xorinzor    schedule 05.06.2014    source источник
comment
Я думаю, что есть способ добавить заголовки в Icecast, но я не помню сразу. Если у вас это не работает, заголовки CORS являются стандартными на моем собственном сервере AudioPump. Если вы хотите попробовать, напишите мне по адресу [email protected]   -  person Brad    schedule 06.06.2014


Ответы (2)


Правильный™ способ сделать это — обновиться до Icecast 2.4.1, в котором эта функция явно добавлена ​​для облегчения использования его (фиксированных) функций JSON API и HTML5.

Пакеты доступны для большинства дистрибутивов. См. http://icecast.org.

person TBR    schedule 25.11.2014
comment
приятно знать, что они добавили это, не было абсолютно никакого простого способа сделать это, когда я задал вопрос - person xorinzor; 27.11.2014
comment
Да, просто хотел добавить это, чтобы, если кто-то наткнется на этот вопрос, у него была возможность выбрать легкий путь. ;-) - person TBR; 10.12.2014
comment
Я просто снова искал это и снова оказался на своем собственном вопросе xD рад, что вы добавили эту информацию, ха-ха - person xorinzor; 06.12.2015

Вы можете добавить заголовок Access-Control-Allow-Origin в ответ клиента магистрали Icecast, добавив свой заголовок в следующую строку в функции util_http_build_header util.c.

См. "Access-Control-Allow-Origin: http://foo.example\r\n", после contenttype_buffer.

ret = snprintf (out, len, "%sServer: %s\r\n%s%s%s%s%s%s",
                              status_buffer,
                  config->server_id,
                  currenttime_buffer,
                  contenttype_buffer,
                  "Access-Control-Allow-Origin: http://foo.example\r\n",
                  (status == 401 ? "WWW-Authenticate: Basic realm=\"Icecast2 Server\"\r\n" : ""),
                              (cache     ? "" : "Cache-Control: no-cache\r\n"
                                                "Expires: Mon, 26 Jul 1997 05:00:00 GMT\r\n"
                                                "Pragma: no-cache\r\n"),
                              (datablock ? "\r\n" : ""),
                              (datablock ? datablock : ""));

Вы можете добавить заголовок Access-Control-Allow-Origin в ответ клиента Icecast 2.3.2, добавив следующее:

bytes = snprintf (ptr, remaining, "Access-Control-Allow-Origin: http://foo.example\r\n");
remaining -= bytes;
ptr += bytes;

к методу format_prepare_headers в format.c после строки, добавляющей сервер заголовок и перед строкой, добавляющей заголовок Cache Control.

Другие улучшения этого предложения включают создание переменных конфигурации Icecast имени заголовка и значений (добавление их в структуру ice_config_tag в cfgfile.h и доступ к ним перед вызовом config_release_config();) или добавление обработки для поддержки общих (например, без ICY) заголовков из источника, поскольку текущая логика в той же функции добавляет icy ко всем заголовкам из источника.

Если вы добавили переменную для пользовательского заголовка в cfgfile.h, например char *custom_header; добавить в определение структуры, а затем изменить _parse_root, config_clear, _set_defaults функции в cfgfile.c, вы сможете установить собственный заголовок в файле конфигурации Icecast, как и любую другую переменную конфигурации.

person Appleman1234    schedule 13.06.2014
comment
где бы я мог настроить заголовок, если бы я добавил его в cfgfile.h? У меня нет опыта разработки на C, поэтому для меня все это немного ново. также в текущей (2.4.0) версии были удалены строки заголовков server и cache-control. - person xorinzor; 14.06.2014