Icecast2 - 如何添加access-control-allow-origin标头?

时间:2014-06-05 13:33:22

标签: http-headers xmlhttprequest debian icecast

我尝试使用正在使用XHR的Dancer.js从我的icecast2服务器传输音乐。

但是,目前我收到了错误(用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服务。

感谢。

2 个答案:

答案 0 :(得分:2)

正确的方法是升级到Icecast 2.4.1,它明确添加了此功能,以帮助使用它(固定)JSON API和HTML5功能。

适用于大多数发行版的软件包。见http://icecast.org

答案 1 :(得分:0)

您可以将Access-Control-Allow-Origin标头添加到Icecast trunk的客户端响应中 通过在util.c的util_http_build_header函数中添加以下行的标题。

请参阅contenttype_buffer之后的"Access-Control-Allow-Origin: http://foo.example\r\n",

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.c中的format_prepare_headers方法,该方法在添加Server标头的行之后和添加Cache Control标头的行之前。

对此建议的其他改进包括制作标题名称和值Icecast配置变量(将它们添加到cfgfile.h中的ice_config_tag结构并在调用config_release_config();之前访问它们)或添加处理以支持泛型(例如,来自源的没有ICY标头,因为同一功能中的当前逻辑会将来自源的所有标题添加为icy。

例如,如果您将自定义标头的变量添加到cfgfile.h, char *custom_header;添加到结构定义,然后修改cfgfile.c中的_parse_rootconfig_clear_set_defaults函数,您将能够在Icecast中设置自定义标头配置文件,与任何其他配置变量一样。