2013-01-04 69 views
1

因此,我設置了一個ejabberd XMPP服務器,並使用nginx作爲EC2實例上的代理。 Strophe.js echobot示例可以從我的Chrome瀏覽器進行連接。這裏是請求頭:Spotify App Strophe.js無法連接到nginx/ejabberd組合

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。

Thx爲您的幫助!

更新: 如果我在本地打開echobot.html,它仍然有效。起源於是null

回答

0

好的,我得到它的工作。而解決方案是一個經典。不過,我的調試可能會幫助其他人。

  1. 起初我看着Web Inspector。它顯示所有的請求都被取消了。不是,許多地方提到的檢查員並不總是正確的。雖然這次是。

  2. 因此Strophe.js無法建立連接。要查看是否有任何自定義Spotify應用可以建立連接,請嘗試教程應用中的Google地圖示例。它不適用於本地Linux版本和Windows下的葡萄酒。它確實在Windows下工作。

  3. 我的下一步是看我的應用程序是否可以從網上加載任何資源。所以我只是添加了一個iframe:。它沒有加載我的網頁。

  4. 我仔細看了教程應用程序和我的應用程序的清單。我找不到任何區別。所以我只複製了「RequiredPermissions」,看看我有一個錯字。一旦這是固定的iframe,並最終strophe.js工作。

這很有趣。幾天前我找了錯別字找不到任何。

綜上所述:

  • 確保你的服務器設置Access-Control-Allow-Origin;*
  • 設置的權限。例如。

    「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」 ]