[英]How can I make cross-domain requests to a local server from an external page in Opera?
我有一个系统负责将作业分配给在不同机器上运行的一组浏览器。 每个浏览器都会重新加载一个等待作业进入的页面。
每项工作的一件事是向本地计算机上运行的本地服务器发出跨域JSONP请求,以便从系统获取一些信息。 除了Opera之外,这在我尝试的每个浏览器中都有效。
这是我用来发出请求的jQuery代码:
$.ajax({
url: "http://10.20.30.40:8000/...",
dataType: "jsonp",
data: someData
success: function(data) { ... }
});
10.20.30.40
主机是本地IP地址,用于标识使用浏览器在计算机上运行的本地服务器。 发出此请求的页面是从像blah.internal.example.com
这样的域名加载的,该域名对我们网络中的所有计算机都是可见的。
从Opera(我使用12.02)做出的第一个这样的请求成功了。 但是,后来以相同方式提出的请求实际上从未实现过。 它们不会显示在检查器的网络选项卡中。 在控制台中,将显示一条消息,指出Linked script not loaded
。
我相信这条消息(以及缺少请求)是由Opera的跨网络安全引发的, 该博客文章对此进行了描述。 在Stackexchange上, 这个答案提出了一种解决方法,但它需要用户交互。 对于我的用例,浏览器由脚本启动,停止和运行,因此用户交互不是一种选择。
有没有办法完全禁用Opera中的跨网络安全性,或者从特定“可信”主机加载的页面? 我需要一个我可以在首选项或opera:config
进行的更改opera:config
将在会话期间发粘。 (所有这些计算机都在内部控制页面上的内部网络上运行,所以我不担心跨网络攻击。)
如果您可以在Opera 12+(以及其他所有浏览器,甚至是IE8)中使用CORS,为什么还要使用JSONP呢? 它就像魅力一样。
只是不要忘记将必需的Access-Control-Allow-*
标头添加到本地服务器。
有关Opera dev网络的更多信息: http : //dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/
尝试完全禁用Opera中的安全功能:config #Cross%20Network(似乎SO不会让我链接到那个..)
当然,如果你已经禁用了安全功能,你应该谨慎地冲浪.. ;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.