5

Ich arbeite gerade an einem Projekt mit den im Threadtitel genannten Technologien.Django restframework, Django Kanäle, Ionic 2 - Websocket Handshake Fehler

Ich habe alles aus dem Browser ausgeführt (die Anwendung ist auf Heroku gehostet), aber wenn ich versuche, eine Verbindung zu den WebSockets von meiner Ionic 2-Anwendung herzustellen, bekomme ich immer einen Fehler beim Einrichten von Handshake.

2016-09-17T15:02:03.200133+00:00 app[web.1]: 2016-09-17 15:02:03,199 DEBUG Connection http.response!uvRVDyvolYEG did not get successful WS handshake. 

2016-09-17T15:02:03.200498+00:00 app[web.1]: 2016-09-17 15:02:03,200 DEBUG WebSocket closed before handshake established 

2016-09-17T15:02:03.169206+00:00 heroku[router]: at=info method=GET path="/1/" host=musicmashup-jukebox.herokuapp.com request_id=c46960d7-bb8f-45bf-b8be-5a934c771d96 fwd="212.243.230.222" dyno=web.1 connect=0ms service=7ms status=400 bytes=74 

Jetzt war eine Idee, dass es ein CORS-Problem sein könnte. Also habe ich django-cors-middleware in der Hoffnung installiert, dass dies das Problem lösen könnte - naja, hat es nicht. Aber ich denke, die App fügt keine Header zum Daphne-Server überhaupt hinzu.

Im Moment habe ich keine Ahnung mehr, ob das Problem auf dem Client oder auf der Serverseite ist.

Hat jemand ähnliche Probleme erlebt?

EDIT: Fand heraus, dass WebSockets und CORS nichts mit einander Why is there no same-origin policy for WebSockets? Why can I connect to ws://localhost? So zu tun haben, meine Vermutung ist, dass der Server den Ursprung Header durch den Client gesendet ablehnen kann. Ich werde sehen, ob ich meine Hände auf die Header bekommen kann gesendet

+0

einige weitere technische Details über Websockets und die Verwendung des Origin Header http://security.stackexchange.com/questions/115716/is-the-origin-header-really-useful-for-securing-a-websocket – platzhersh

Antwort

0

In Ordnung, das Problem war irgendwie mit dem Ursprung Header. Ionic scheint einen Ursprungs-Header zu senden, der "file: // .." enthält, der vom Websocket-Server abgelehnt/blockiert wurde.

Leider habe ich keinen Weg gefunden, den Webserver auf Heroku so zu konfigurieren, dass er dies ignoriert oder einen anderen Ursprungsheader auf eingehende Pakete setzt.

Mein procfile auf Heroku:

web: daphne app.asgi:channel_layer --port $PORT--bind 0.0.0.0 -v2 
worker: python manage.py runworker -v2 

Was ich tat, dann wurde zu einem Selbst die gesamte Anwendung zu bewegen gehostet Ubuntu-Server und ein nginx vor Daphne setzen, wo ich eine Regel erstellt, die Herkunft außer Kraft zu setzen Header von eingehenden Paketen.

So kann es gemacht werden .. Ich hoffe, dass dies einigen Menschen helfen kann.

0

Danke platzhersch,

es für mich mit der folgenden nginx Regel gearbeitet:

proxy_set_header Origin http://$host; 
+0

Hey @twixx, danke! Hast du das auf Heroku gemacht? – platzhersh

Verwandte Themen