5

Tôi hiện đang làm việc trên một dự án sử dụng các công nghệ được đề cập trong tiêu đề chủ đề.Django restframework, kênh Django, Ionic 2 - lỗi bắt tay websocket

Tôi nhận tất cả chạy từ trình duyệt (ứng dụng được lưu trữ trên heroku), nhưng khi tôi cố gắng kết nối với websockets từ ứng dụng Ionic 2 của mình, tôi luôn gặp lỗi khi bắt tay.

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 

Bây giờ, một ý tưởng là, đó có thể là vấn đề về CORS. Vì vậy, tôi đã cài đặt django-cors-middleware với hy vọng điều này có thể giải quyết được vấn đề - cũng không. Nhưng tôi nghĩ ứng dụng không thêm bất kỳ tiêu đề nào vào máy chủ Daphne.

Hiện tại tôi không còn ý tưởng nào nữa, nếu sự cố xảy ra trên máy khách hoặc ở phía máy chủ.

Có ai gặp phải sự cố tương tự không?

EDIT: Phát hiện ra rằng ổ cắm web và CORS không có liên quan gì đến nhau Why is there no same-origin policy for WebSockets? Why can I connect to ws://localhost? Vì vậy, tôi đoán là máy chủ có thể từ chối tiêu đề gốc do khách hàng gửi. Tôi sẽ xem liệu tôi có thể đặt tay lên các tiêu đề được gửi

+0

một số chi tiết kỹ thuật khác trên websockets và sử dụng tiêu đề gốc http://security.stackexchange.com/questions/115716/is-the-origin-header-really-useful-for-securing-a-websocket – platzhersh

Trả lời

0

Được rồi, vấn đề liên quan đến phần đầu nguồn gốc. Ionic dường như đang gửi một tiêu đề gốc chứa "file: // ..", đã bị máy chủ websocket từ chối/chặn.

Thật không may là tôi không tìm cách cấu hình máy chủ web trên heroku để bỏ qua điều này hoặc đặt tiêu đề gốc khác trên các gói dữ liệu đến.

My Procfile trên Heroku:

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

Tôi đã làm gì sau đó, đã được di chuyển toàn bộ ứng dụng để tự tổ chức máy chủ Ubuntu và đưa một nginx trước Daphne, nơi tôi đã tạo ra một quy tắc để ghi đè nguồn gốc tiêu đề của các gói tin đến.

Đó là cách nó có thể được thực hiện .. Tôi hy vọng điều này có thể giúp một số người.

0

Cảm ơn bạn platzhersch,

nó làm việc cho tôi với các quy tắc nginx sau:

proxy_set_header Origin http://$host; 
+0

Hey @twixx, cảm ơn! Bạn đã làm điều đó trên heroku? – platzhersh

Các vấn đề liên quan