Django restframework,Django频道,Ionic 2 - websocket握手错误

问题描述:

我目前正在使用主题标题中提到的技术进行项目工作。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

这个问题是固定在达芙妮v.1.0.3 https://github.com/django/daphne/commit/07dd777ef11f5091931fbb22bdacb9e4aefea7da

您还需要如果使用了更新频道和asgi-redis。

+0

没有尝试过,但看起来这可能是迄今为止最好的答案。感谢分享! – platzhersh

好的,问题与原始标题有关。 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的达芙妮,在那里我创建了一个规则来覆盖起源前传入数据包的标题。

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

谢谢platzhersch,

它为我工作有以下nginx的规则:

proxy_set_header Origin http://$host; 
+0

嘿@twixx,谢谢!你有没有在heroku上做到这一点? – platzhersh