javascript - 如何从 Opera 的外部页面向本地服务器发出跨域请求?

标签 javascript jquery security cross-domain opera

我有一个系统负责将作业分配给在不同机器上运行的一组浏览器。每个浏览器都会重新加载一个页面,等待作业进入。

每个作业做的一件事是向本地机器上运行的本地服务器发出跨域 JSONP 请求,以便从系统中获取一些信息。这适用于我尝试过的所有浏览器,但 Opera 除外。

这是我用来发出请求的 jQuery 代码:

$.ajax({
  url: "http://10.20.30.40:8000/...",
  dataType: "jsonp",
  data: someData
  success: function(data) { ... }
});

10.20.30.40 host为 native IP地址,标识 native 运行浏览器的本地服务器。发出此请求的页面是从像 blah.internal.example.com 这样的域名加载的,它对我们网络内的所有机器都是可见的。

从 Opera(我使用的是 12.02)发出的第一个此类请求成功。但是,以相同方式发出的后续请求从未真正发出过。它们不会出现在检查器的网络选项卡中。在控制台中,会显示一条消息,指出 Linked script not loaded

我相信此消息(以及缺少请求)是由 Opera 的跨网络安全触发的,这在 this blog post 中有描述。 .在 Stackexchange 上,this answer提出了一种解决方法,但它需要用户交互。对于我的用例,浏览器由脚本启动、停止和运行,因此用户交互不是一种选择。

有没有办法在 Opera 中完全禁用这种跨网络安全性,或者对于从特定“受信任”主机加载的页面?我需要在首选项或 opera:config 中进行更改,这将在 session 之间保持粘性。 (所有这些计算机都在内部控制页面上的内部网络上运行,所以我不担心跨网络攻击。)

最佳答案

如果您可以在 Opera 12+(以及所有其他浏览器,甚至 IE8)中使用 CORS,为什么还要使用 JSONP?它就像魅力一样。

只是不要忘记将所需的 Access-Control-Allow-* header 添加到您的本地服务器。

Opera 开发网络上的更多信息: http://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/

关于javascript - 如何从 Opera 的外部页面向本地服务器发出跨域请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486960/

相关文章:

javascript - Firefox Addon SDK 中内容脚本的回调

android - 从 Android 读取计算机的 RSA key 指纹

security - Inkscape 的 --vacuum-defs 是否使 SVG 真正安全?

mysql - 使用密码和用户名锁定 mysql 数据库

php - jQuery 提交前确认

javascript - JavaScript 领域中 [[intrinsics]] 属性的内容是什么?

javascript - XMLHttpRequest 通过但不是我的 Jquery Ajax 调用调用相同的东西

javascript - 从函数内部为变量赋值

jquery - django 简单的ajax请求

php - 如何整合我的代码?基于 JavaScript 和 PHP 的问题