This looks like the exact same issue. Basically, the websocket handshake looks something like this: 1. Client sends a HTTP request to the websocket endpoint. This request contains some special headers. Something like this: Connection: Upgrade and Upgrade: websocket. This tells the server the client wants to switch to a different protocol. 2. The server sees these special headers and if it's capable of switching protocols, it sends a 101 status code back to the client. 3. The process of initiating a websocket connection starts. The problem is that AWS elastic load balancers, strip the special headers from the initial client request. So when the server receives the request, the headers are not present and the request usually has no other useful info inside. The server has no idea how to process it, so it sends back a 400 response. There was some workaround described using a tcp load balancer instead of a HTTP one. I'm not really sure if it was ever resolved but the original ticket was this one: https://issues.jboss.org/browse/AEROGEAR-7880 |