【问题标题】:Cross Domain request for service using SproutCore使用 SproutCore 的跨域服务请求
【发布时间】:2011-12-01 20:57:50
【问题描述】:

我一直试图解决这个问题,但没有任何成功。

我的域中有一个 Web 应用程序,例如 www.myDomain.com。我需要调用另一个域中存在的服务,比如www.anotherDomain.com/service.do?

我正在使用 SproutCore 的 SC.Request.getUrl(www.anotherDomain.com/service.do?) 调用该服务。

我收到一条错误消息,显示 Origin www.myDomain.com is not allowed by access-control-allow-origin。

当我处于开发阶段并使用sc-server 时,问题已通过代理解决。现在我已经将应用程序部署到了一个实际的服务器,我用实际的域名替换了我设置代理的所有行。我又开始遇到这个错误了。

问题是 我无法对其他域上的服务器进行任何更改。我遇到的所有帖子都指出,另一个域上的其他服务器应该提供 access-control-allow-origin 标头,并且它应该支持 OPTIONS 动词。

我的问题是,我是否可以使用 SproutCore 的 SC.Request.getUrl() 方法连接到该服务?

此外,我读过的其他帖子提到不应预检简单的GET 请求。那为什么我的请求是OPTION 而不是GET

提前非常感谢! :D

【问题讨论】:

    标签: ajax xmlhttprequest cross-domain sproutcore


    【解决方案1】:

    这不是 Sproutcore 问题;这是一个 javascript 同源策略问题。

    如果你不能修改生产服务器,你别无选择,只能开发自己的代理服务器,让你的代理打到真正的服务。

    这实际上是在您的生产环境中替换 sc-server。

    这个服务器所做的就是接受传入的请求并将其传递给www.anotherDomain.com/?service.do

    您需要确保您传递了所有参数、cookie、标头、http 动词等......

    这远非理想,因为现在错误可能发生在更多地方。真正的服务失败了吗?代理失败了吗?等等

    如果你可以修改其他域,你可以

    1) 在那里部署您的 SC 应用程序。
    2) 放入 CORS 标头,以便您可以进行跨域请求

    【讨论】:

    • 嗯。我会试一试,看看效果如何。关于获得代理设置的任何建议?我以前从来没有这样做过。
    • 这取决于您选择的服务器技术。只要搜索开发代理服务器,应该有大量的例子..
    • 好吧,我们通过创建一个实际调用服务并获取 XML 的 JSP 页面解决了这个问题。 SproutCore 应用程序现在调用 JSP 页面(在同一个域中)并且 JSP 调用外部服务。 :) 感谢您的帮助,因为代理是唯一的方法。 :)
    • 请记住,您需要传递所有请求数据,例如 cookie、标头、参数等...
    猜你喜欢
    • 2012-05-05
    • 2015-07-25
    • 2018-03-02
    • 2014-01-20
    • 2012-10-24
    • 2013-06-19
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多