尽管所有资源都在同一个域中,但没有“Access-Control-Allow-Origin”问题

时间:2014-09-13 21:21:37

标签: amazon-ec2 xmpp access-control strophe bosh

我正在编写一个javascript / strophejs xmpp客户端,到目前为止,它已经使用它通过公共BOSH服务(http://bosh.metajack.im:5280/xmpp-httpbind)连接到托管在.immim上的xmpp服务器。 html / javascript也在线托管,位于testserver.host56.com(不是真正的网址)。

现在,我决定在亚马逊网络云上托管xmpp服务器,并使用我自己的托管服务,托管在这台服务器上。

现在,我的ec2实例位于myAWSDNS.us-west-2.compute.amazonaws.com(也不是真正的网址)。

我还在myAWSDNS.us-west-2.compute.amazonaws.com:7070上启动并运行了BOSH服务。

最后,我还允许通过实例防火墙和AWS安全组策略为此ec2实例提供流量。

但是,当尝试使用我的JS / strophejs客户端连接到此实例的xmpp服务器(openfire)时,我在Chrome javascript控制台中收到以下消息:

  

XMLHttpRequest无法加载http://myAWSDNS.us-west-2.compute.amazonaws.com:7070/。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://myAWSDNS.us-west-2.compute.amazonaws.com'因此不允许访问

如果原点与请求的资源位于同一个域中,为什么会出现此问题?

Ec2实例正在运行Windows Server 2012。

这是我用来登录的代码:

var conn = new Strophe.Connection("http://myAWSDNS.us-west-2.compute.amazonaws.com:7070/");
conn.connect("chris@myAWSDNS.us-west-2.compute.amazonaws.com", "myPassword", somecallback);

谢谢,

最好的问候,

克里斯

2 个答案:

答案 0 :(得分:1)

由于端口不同,浏览器不允许。我不知道您在AWS上拥有什么,但您可以在两个方向代理请求,例如:

http://myAWSDNS.us-west-2.compute.amazonaws.com/http-bind/   <--------->   http://myAWSDNS.us-west-2.compute.amazonaws.com:7070/

请参阅Apache使用案例教程的第5项:Connecting with Strophe.js

答案 1 :(得分:1)

如前所述,即使您在同一个域中,端口也必须匹配,否则需要CORS。

您可能没有使用正确的连接管理器网址,我见过的所有网址都使用以/http-bind/或类似方式结尾的地址。

您是否尝试过与Strophe.Connection("http://myAWSDNS.us-west-2.compute.amazonaws.com:7070/http-bind/");联系?

此外,您只需访问http://myAWSDNS.us-west-2.compute.amazonaws.com:7070/crossdomain.xml即可测试是否存在crossdomain.xml文件,以确保已成功启用CORS。