2013-01-04 3 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 

나는 애플리케이션으로 Spotify에서 작동하도록 echobot 예제를 이식했습니다. 그러나 Strophe는 연결할 수 없습니다. 다음은 웹 검사기 네트워크 로그입니다.

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'/> 

Now. manifest.json을 모양의 RequiredPermissons 다음과 같이 : 나는이 permissons 일을 생각 있도록

"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 설정에서 그렇게했다. 첫 번째 요청의 응답 헤더에서 확인할 수 있습니다.

error 0 happened 

그래서 어떤 제안 : 켜져있는 경우

Strophe.js 자체는 예 로그에 말한다? 매니페스트가 옳은 것 같음 Access-Control-Allow-Origin; * 오른쪽처럼 보임 브라우저에서는 작동하지만 Spotify에서는 작동하지 않습니다.

도움을 받으려면 Thx!

업데이트 : 로컬로 echobot.html을 열면 여전히 작동합니다. 원점은 null입니다.

답변

0

그래, 알았어. 그리고이 솔루션은 고전입니다. 그러나 제 디버깅은 다른 사람들을 도울 것입니다.

  1. 처음에는 웹 검사기를 살펴 봤습니다. 모든 요청이 취소 된 것으로 나타났습니다. 검사관이 여러 곳에서 언급 한 것처럼 항상 옳지는 않습니다. 이번은 그것이 있었다.

  2. 그래서 Strophe.js는 연결을 설정할 수 없습니다. 사용자 지정 Spotify 앱이 연결을 설정할 수 있는지 확인하기 위해 튜토리얼 앱에서 Google지도 예제를 시도했습니다. 네이티브 Linux 버전과 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" ]