AWS ELB配下のサーバで、WebSocketのデーモンを(例えば、TCP/3000ポートで)動かしている環境にて、ブラウザ側コンソールで「Error during WebSocket handshake: Unexpected response code: 400」エラーが表示された場合の対処例を記載しています。
エラー内容
以下のようなエラーがブラウザ側コンソールで表示された場合です。
WebSocket connection to ‘ws://xxx.xxxx.xxxx:3000/socket.io/?EIO=3&transport=websocket&sid=xxxxx’ failed: Error during WebSocket handshake: Unexpected response code: 400
原因と対策
AWSでは、HTTP/HTTPSでのWebSockets通信はサポートしていないようです。
私の環境の原因は、ELBのリスナー設定の問題でした。リスナー設定で、3000番ポートの「ロードバランサーのプロトコル」を「HTTP」にしていましたが、「TCP」に変更したところ、今回のエラーは消えました。
ご参考まで。