跨域请求到localhost

时间:2010-11-19 20:40:59

标签: javascript ajax cross-domain

免责声明:我已经考虑了解决问题的各种方法,因此请在将此标记为重复问题之前阅读此内容

我在https://xyz.com上运行了一个javascript,它必须从用户本地计算机上运行的应用程序ABC中检索信息,例如端口8080.

我的约束是我无法修改从ABC发出的HTTP标头,也不希望用户安装另一个应用程序,该应用程序将我的请求路由到ABC

跨域/窗口消息传递选项

a) window.postMessage:由于我无法在本地机器上运行脚本而被排除在外 b) XDR对象(IE)或Access-Control-Allow-Origin(Firefox,Safari等):由于无法修改标题而被排除在外 c) JSONP:再次这不起作用,因为我无法将响应包含在函数名称中

作为一种解决方法,仅用于测试我已将http://xyz.com添加到受信任列表,并为此列表中的网站启用了Access Data Across Domains。 AFAIK,此选项仅适用于IE 5+浏览器。此解决方法允许我发送和接收来自http://127.0.0.1:8080的邮件 alt text

我的问题是双重的 1)如果我在投入生产时继续使用上述方法,那么我向用户展示的安全隐患是什么?我可以插上那些洞吗? 2)我是否还有其他选择可以实现我的目标。

PS:我希望尽可能远离ActiveX或Flash,但如果这是我当前方法的唯一可行替代方案,那么我将不得不遵守该行< BR />

干杯

2 个答案:

答案 0 :(得分:1)

如果本地应用程序可以提供单个html文档,作为桥接器,那么您可以轻松地使用跨文档消息传递(例如使用easyXDM)以及来自此文档的ajax请求来执行此操作。这是一种非常简单的方法,也是一种常用方法。

easyXDM实际上附带了这样一个文档,你可以阅读它here

答案 1 :(得分:0)

我认为最简单的方法是将服务器脚本放在https://xyz.com上,它将充当javascript文件和ABC之间的桥梁。然后javascript文件将简单地向它自己的服务器脚本发送一个AJAX请求,该脚本将负责从远程域获取信息。唯一可行的解​​决方案可以在大多数浏览器中使用,并且不需要使用某些客户端技术(如Flash或ActiveX),这是JSONP,但您已经排除了这一点,因为您无法控制远程域。