を使用した WebSocket 接続の確立に問題がありQWebSocket
ます。Qt 5.6 とそのQWebSocket
実装を使用しています。サーバーは正しく動作し、WS v13プロトコルを使用していると確信しています。すべてのブラウザで正常に動作します。error
サーバーに接続しようとすると、QWebSocket がstateChanged
これらのメッセージを出力して通知します (errorString()
メソッドを使用して取得します)。
QWebSocketPrivate::processHandshake: Connection closed while reading header.
Invalid statusline in response: Upgrade: websocket
Invalid statusline in response: Connection: Upgrade
Invalid statusline in response: Sec-WebSocket-Accept: HLaITyncgax+CH7OUIXnsCfFDDY=
Invalid statusline in response: // there's a carriage return symbol
と表示されていますがConnection closed while reading header
、実際には接続は閉じられていません (サーバーがしばらくして websocket を介して追加のパケットを送信するため)。websocket.org のエコー テストでアプリケーションをテストしたところ、問題なく動作しました。しかし、両方の試行でパケットを盗聴しましたが、大きな違いは見つかりませんでした。
接続しようとしているサーバーでのパケット スニッフィングの結果:
GET / HTTP/1.1
Host: <hostname>:6670
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: WcIsYc1AZ6CKikXFwGXgMg==
Origin: http://<hostname>
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Connection: keep-alive, Upgrade
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: 7lfSGmSz/eW1mSzaMnuzOqg00w4=
との接続でのパケット スニッフィングの結果echo.websocket.org
:
GET / HTTP/1.1
Host: echo.websocket.org:80
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: MUAZoP0Ef4KSWkmtsB5YDw==
Origin: http://<hostname>
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Connection: keep-alive, Upgrade
HTTP/1.1 101 Web Socket Protocol Handshake
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Headers: authorization
Access-Control-Allow-Headers: x-websocket-extensions
Access-Control-Allow-Headers: x-websocket-version
Access-Control-Allow-Headers: x-websocket-protocol
Access-Control-Allow-Origin: http://<hostname>
Connection: Upgrade
Date: Thu, 31 Mar 2016 12:05:49 GMT
Sec-WebSocket-Accept: c4yAe+A1VRuhF1LSC/TGgPoa8N4=
Server: Kaazing Gateway
Upgrade: websocket
<data exchange goes here normally>
問題を調査して解決するにはどうすればよいですか? サーバーにアクセスできません。
PS はい、私はQTBUG-40878を認識しています。これは Qt 5.3.1 に影響しますが、私は 5.6.0 を使用しており、Qt セットアップで明らかに修正されています。