Spotify App Strophe.js无法连接到nginx / ejabberd组合

时间:2013-01-04 11:32:12

标签: nginx xmpp ejabberd strophe bosh

所以我设置了一个ejabberd XMPP服务器并使用nginx作为EC2实例的代理。 Strophe.js echobot示例可以从我的Chrome浏览器连接。以下是请求标题:

Request URL:http://foo.eu-west-1.compute.amazonaws.com/http-bind
Request Method:POST
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:115
Content-Type:application/xml
Host:foo.compute.amazonaws.com
Origin:foo.eu-west-1.compute.amazonaws.com
Referer:foo.eu-west-1.compute.amazonaws.com/examples/echobot.html
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Request Payload
<body rid='2692151172' xmlns='http://jabber.org/protocol/httpbind' sid='15f6dc6cbc7a7d69b5db531c2ebf7828e094f043'/>
Response Headers
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Length:286
Content-Type:text/xml; charset=utf-8
Date:Fri, 04 Jan 2013 11:14:14 GMT
Server:nginx/1.2.4

我将echobot示例移植到Spotify中作为应用程序工作。但是,Strophe无法连接。这是Web Inspector网络日志:

Request URL:http://foo.eu-west-1.compute.amazonaws.com/http-bind
Request Headers
POST http://foo.eu-west-1.compute.amazonaws.com/http-bind HTTP/1.1
Origin: sp://chatify
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.15 Safari/535.11
Content-Type: application/xml
Request Payload
<body rid='790399813' xmlns='http://jabber.org/protocol/httpbind' to='ec2-54-246-45-111.eu-west-1.compute.amazonaws.com' xml:lang='en' wait='60' hold='1' content='text/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>

现在。 manifest.json中的RequiredPermissons如下所示:

"RequiredPermissons": [
    "http://foo.eu-west-1.compute.amazonaws.com",
    "foo.eu-west-1.compute.amazonaws.com",
    "http://foo.eu-west-1.compute.amazonaws.com/http-bind",
    "foo.eu-west-1.compute.amazonaws.com/http-bind"
]

我可以从foo.eu-west-1.compute.amazonaws.com加载来源,所以我认为这些权限有效。 Spotify应用程序使用不同的来源,“sp:// chatify”。我读到这可能会导致问题。并且Access-Control-Allow-Origin:*应添加到标题中。我在nginx配置中这样做只是为了发现它一直都是发送的。您可以在第一个请求的响应标头中看到它。

Strophe.js本身在示例的日志中说明如果打开:

error 0 happened

那么有什么建议吗? 清单似乎是正确的 Access-Control-Allow-Origin; *似乎正确 它适用于浏览器,但不适用于Spotify。

谢谢你的帮助!

更新 如果我在本地打开echobot.html它仍然有效。然后原点是null

1 个答案:

答案 0 :(得分:0)

好的,我开始工作了。而解决方案是经典的。但是,我的调试可能对其他人有帮助。

  1. 起初我看了Web Inspector。它表明所有请求都被取消了。没有检查员在许多地方提到的并不总是正确的。不过这次是。

  2. 因此Strophe.js无法建立连接。要查看是否有任何自定义Spotify应用程序可以建立连接,我尝试了教程应用程序中的Google Maps示例。它不适用于本机Linux版本和Windows下的Windows。但它确实在Windows下工作。

  3. 我的下一步是查看我的应用是否可以从网络加载任何资源。所以我只是添加了一个iframe:它没有加载我的页面。

  4. 我仔细查看了教程应用和我的应用的清单。我找不到任何区别。所以我只是复制了“RequiredPermissions”,看到我有一个错字。一旦修复了iframe,最终strophe.js就可以了。

  5. 很有趣。我几天前找不到拼写错误我找不到任何错误。

    总结一下:

    • 确保您的服务器设置Access-Control-Allow-Origin;*
    • 设置权限。 E.g。

      “RequiredPermissions”:[         “http://ec2-foo.eu-west-1.compute.amazonaws.com”         “ec2-foo.eu-west-1.compute.amazonaws.com”         “http://ec2-foo.eu-west-1.compute.amazonaws.com/http-bind”         “ec2-foo.eu-west-1.compute.amazonaws.com/http-bind”     ]