我尝试使用正在使用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服务。
感谢。
答案 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_root
,config_clear
,_set_defaults
函数,您将能够在Icecast中设置自定义标头配置文件,与任何其他配置变量一样。