Spotify App Strophe.js не может подключиться к комбинации nginx/ejabberd

Поэтому я настроил XMPP-сервер ejabberd и использую nginx в качестве прокси на экземпляре EC2. Пример эхобота Strophe.js может подключаться из моего браузера 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

Я портировал пример эхобота для работы в 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'/>

Теперь. RequiredPermissons в файле manifest.json выглядит следующим образом:

"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.


person Karsten    schedule 04.01.2013    source источник


Ответы (1)


Ладно, я взялся за работу. И решение классическое. Однако моя отладка может помочь другим.

  1. Сначала я посмотрел в веб-инспекторе. Он показал, что все запросы были отменены. Нет, инспектор не всегда прав, как упоминалось во многих местах. Хотя на этот раз так и было.

  2. Итак, Strophe.js не смог установить соединение. Чтобы увидеть, может ли какое-либо пользовательское приложение Spotify установить соединение, я попробовал пример Google Maps из учебного приложения. Не работало с родной версией линукса и виндой под вайном. Однако он работал под окнами.

  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" ]

person Karsten    schedule 10.01.2013