5

我目前正在使用主題標題中提到的技術進行項目工作。Django restframework,Django頻道,Ionic 2 - websocket握手錯誤

我從瀏覽器(應用程序託管在heroku上)得到了所有這些,但是當我嘗試從我的Ionic 2應用程序連接到websockets時,我總是遇到一個建立握手的錯誤。

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 

現在有一個想法是,它可能是一個CORS問題。所以我安裝了django-cors-middleware,希望這可以解決問題 - 事實並非如此。 但我認爲該應用程序根本不會向Daphne服務器添加任何標題。

此刻我不知道了,如果問題出現在客戶端或服務器端。

有沒有人遇到過類似的問題?

編輯: 發現原來的WebSockets和CORS沒有什麼做相互Why is there no same-origin policy for WebSockets? Why can I connect to ws://localhost? 所以我的猜測是,該服務器可以拒絕客戶端發送的Origin標。我會看看我是否可以把我的手放在要發送的標題上

+0

關於websockets和原始頭文件的使用的一些技術細節http://security.stackexchange.com/questions/115716/is-the-origin-header-really-useful-for-securing-a-websocket – platzhersh

回答

0

好的,問題與原始標題有關。 Ionic似乎正在發送一個包含「file:// ..」的原始頭文件,該頭文件被websocket服務器拒絕/阻止。

不幸的是,我沒有找到一種方法來配置heroku上的web服務器,以忽略這個或者在傳入數據包上設置另一個源頭。

我Procfile在Heroku:

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

我做了什麼,然後,在動整個應用程序自託管Ubuntu的服務器,然後將一個nginx的達芙妮,在那裏我創建了一個規則來覆蓋起源前傳入數據包的標題。

這就是它可以做到的..我希望這可以幫助一些人。

0

謝謝platzhersch,

它爲我工作有以下nginx的規則:

proxy_set_header Origin http://$host; 
+0

嘿@twixx,謝謝!你有沒有在heroku上做到這一點? – platzhersh