【问题标题】:Cross Domain Request to localhost跨域请求到 localhost
【发布时间】:2010-11-28 07:04:20
【问题描述】:

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

我有一个在 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
发送和接收消息

我的问题有两个方面
1) 如果我在投入生产时继续使用上述方法,我会让用户面临哪些安全隐患?我可以堵住那些洞吗?
2) 是否有任何其他选择可以实现我的目标。

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

干杯

【问题讨论】:

  • 我不明白,你目前的做法是什么?那只适用于 IE?
  • Felix,我添加了临时解决方法的屏幕截图
  • 所以它实际上不是一个真正的解决方法,因为它只适用于 IE ;)
  • Felix,我猜每个浏览器都提供了类似的禁用跨域请求验证的机制,但我不想走这条路。

标签: javascript ajax cross-domain


【解决方案1】:

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

easyXDM居然自带这样一个文档,大家可以去here阅读一下。

【讨论】:

  • 谢谢肖恩,我会测试一下并恢复
【解决方案2】:

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

【讨论】:

  • -1 xyz.com 上的服务器脚本如何访问客户端 localhost 上运行的服务?
  • @Byron Whitlock,有什么区别?在 8080 端口上运行了一个服务。当然,如果这个服务没有暴露在互联网上,只有上帝可以访问它,所以这种情况下的问题是没有意义的。我猜 OP 意味着客户端上的这个 8080 端口可以从互联网访问。
  • 达林,对不起,如果我很迟钝,在https//xyz.com 上运行的脚本无法访问用户本地计算机上的应用程序,因为端口没有暴露在互联网上
  • 那么您唯一的选择就是使用 Flash 或 ActiveX 等客户端脚本技术。
  • 你能回答我的第一个问题吗?如果有人无法提供合适的替代方案,我肯定会选择 Flash、ActiveX 或 Java Applet:(
猜你喜欢
  • 2019-09-13
  • 2021-09-11
  • 2021-05-17
  • 2018-09-12
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多