我一直试图解决这个问题,但没有取得任何成功。
我的网域上有一个webapp,比如www.myDomain.com
。我需要调用另一个域中的服务,比如www.anotherDomain.com/service.do?
我正在使用SproutCore的SC.Request.getUrl(www.anotherDomain.com/service.do?)
来调用该服务。
我收到一条错误消息,说访问控制允许来源不允许来源www.myDomain.com
。
当我处于开发阶段并使用sc-server
时,问题已使用代理解决。现在我已将应用程序部署到实际的服务器,我用实际域名替换了我设置代理的所有行。我已经开始再次收到该错误。
问题是我无法对其他域上的服务器进行任何更改。我遇到的所有帖子都说明另一个域中的其他服务器应该提供access-control-allow-origin
标头,并且它应该支持OPTIONS
动词。
我的问题是,我是否可以使用SproutCore的SC.Request.getUrl()
方法连接到该服务?
此外,我读过的其他帖子提到一个简单的GET
请求不应该预先检查。为什么我的请求会以OPTION
而不是GET
?
提前感谢! :d
答案 0 :(得分:0)
这不是Sproutcore问题;这是一个javascript同源政策问题。
如果您无法修改生产服务器,则别无选择,只能开发自己的代理服务器,并让您的代理服务器获得真实服务。
这有效地取代了生产环境中的sc-server。
所有这个服务器都会接收传入请求并将其传递给www.anotherDomain.com/?service.do
。
您需要确保传递了所有参数,Cookie,标题,http动词等等。
这远非理想,因为现在错误可能发生在更多地方。真实的服务失败了吗?代理失败了吗?等
如果您可以修改其他域,则可以
1)在那里部署你的SC应用程序 2)放入CORS标题,以便您可以进行跨域请求