了解 UPnP/DLNA 浏览时的 CORS
Understanding CORS on UPnP/DLNA browsing
我一直在玩自己开发的 UPNP/DLNA 浏览器。
我设法做的是一种基于 shell 脚本的方法,使用 curl 查询服务器和 xsl 处理以从答案中制作 html 页。
接下来我想我可以将所有这些构建到交互式浏览器页面的 javascript/kind 中。但是现在我遇到了 CORS 问题,因为请求是由浏览器预检的(使用 curl 时它们没有预检并且服务器不说 CORS,只是 UPnP)。
尝试获取 upnp 树的根的一些最简单的代码:...
<html>
<head>
<script language="javascript">
function newx() {
var h = new XMLHttpRequest();
h.open("POST", "http://hcds6106:50001/ContentDirectory/control", true);
h.onreadystatechange = processme;
h.setRequestHeader("SOAPACTION",'"urn:schemas-upnp-org:service:ContentDirectory:1#Browse"');
h.setRequestHeader("Content-Type", "text/xml; charset='utf-8'");
h.send('<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:ns0="urn:schemas-upnp-org:service:ContentDirectory:1" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><ns0:Browse><ObjectID></ObjectID><BrowseFlag>BrowseDirectChildren</BrowseFlag><Filter>*</Filter><StartingIndex>0</StartingIndex><RequestedCount>0</RequestedCount><SortCriteria /></ns0:Browse></s:Body></s:Envelope>');
}
function processme()
{
alert(this.status);
}
</script>
</head>
<body onload="newx();"/>
</html>
显然浏览器 (Firefox 47.0) 命中
Cross-Origin Request Blocked: The Same Origin Policy disallows reading
the remote resource at http://hcds6106:50001/ContentDirectory/control.
(Reason: CORS header 'Access-Control-Allow-Origin' missing).
在这种情况下,有什么合理的方法可以让我的浏览器跳过 CORS 内容,因为服务器不是为它而设计的吗?对于 Firefox 或任何其他常见的 UserAgent?我简直不敢相信没有浏览器它会如此简单,而且几乎不可能让它在浏览器内进行交互......TIA!
Is there any reasonable way I can tell my browser to skip the CORS stuff in this case because the server was not made for it?
没有
如果可能的话,我可以告诉我网站访问者的浏览器跳过 CORS 内容,让我从他们的网上银行和网络邮件服务以及他们公司的内部网上读取他们的数据。
我一直在玩自己开发的 UPNP/DLNA 浏览器。
我设法做的是一种基于 shell 脚本的方法,使用 curl 查询服务器和 xsl 处理以从答案中制作 html 页。
接下来我想我可以将所有这些构建到交互式浏览器页面的 javascript/kind 中。但是现在我遇到了 CORS 问题,因为请求是由浏览器预检的(使用 curl 时它们没有预检并且服务器不说 CORS,只是 UPnP)。 尝试获取 upnp 树的根的一些最简单的代码:...
<html>
<head>
<script language="javascript">
function newx() {
var h = new XMLHttpRequest();
h.open("POST", "http://hcds6106:50001/ContentDirectory/control", true);
h.onreadystatechange = processme;
h.setRequestHeader("SOAPACTION",'"urn:schemas-upnp-org:service:ContentDirectory:1#Browse"');
h.setRequestHeader("Content-Type", "text/xml; charset='utf-8'");
h.send('<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:ns0="urn:schemas-upnp-org:service:ContentDirectory:1" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><ns0:Browse><ObjectID></ObjectID><BrowseFlag>BrowseDirectChildren</BrowseFlag><Filter>*</Filter><StartingIndex>0</StartingIndex><RequestedCount>0</RequestedCount><SortCriteria /></ns0:Browse></s:Body></s:Envelope>');
}
function processme()
{
alert(this.status);
}
</script>
</head>
<body onload="newx();"/>
</html>
显然浏览器 (Firefox 47.0) 命中
Cross-Origin Request Blocked: The Same Origin Policy disallows reading
the remote resource at http://hcds6106:50001/ContentDirectory/control.
(Reason: CORS header 'Access-Control-Allow-Origin' missing).
在这种情况下,有什么合理的方法可以让我的浏览器跳过 CORS 内容,因为服务器不是为它而设计的吗?对于 Firefox 或任何其他常见的 UserAgent?我简直不敢相信没有浏览器它会如此简单,而且几乎不可能让它在浏览器内进行交互......TIA!
Is there any reasonable way I can tell my browser to skip the CORS stuff in this case because the server was not made for it?
没有
如果可能的话,我可以告诉我网站访问者的浏览器跳过 CORS 内容,让我从他们的网上银行和网络邮件服务以及他们公司的内部网上读取他们的数据。