我正在编写一个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);
谢谢,
最好的问候,
克里斯
答案 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。