title: JavaScript WebSocket closes connection straight away
body: <p>I'm writing my own script to connect to a websocket server with JavaScript using the WebSocket API. I'm having problems with the connection closing straight away.</p>
  
  <p>Here's the client side script:</p>
  
  <pre><code>var host = 'ws://localhost:8080';
  try
  {
      debug.add('Connection request submitted for ' + host);
      socket = new WebSocket(host);
      debug.readyStateListener();
  
      debug.add('Socket request started');
  
      socket.onopen = function()
      {
          debug.add('Connection opened');
      }
  
      socket.onmessage = function(message)
      {
          debug.add('data received ' + message.data);
      }
      socket.onclose = function()
      {
          debug.add('Connection closed');
      }
  }
  catch(e)
  {
      debug.add('WebSockets error ' + e.toString() );
  }
  </code></pre>
  
  <p>This is the debug I receive:</p>
  
  <pre><code>Connection request submitted for ws://localhost:8080
  socket readyState change to 0
  Socket request started
  socket readyState change to 3
  Connection closed
  </code></pre>
  
  <p>The debug.readyStateListener() polls socket.readyState for changes. What's happening is it changes to 0 meaning the connection is opening, then straight away changes to 3 that the connection has been closed.</p>
  
  <p>The server receives the connection fine but the connection is then closed straight away by the client.</p>
  
  <p>I've tried it in Opera 11 with WebSockets enabled and in the latest version of Chrome. Both time's I get the same result.</p>
  
  <p>I can communicate perfectly with the server through a raw connection, or simply by visiting <a href="http://localhost:8080/" rel="nofollow">http://localhost:8080/</a> in my browser this is the result:</p>
  
  <pre><code>GET / HTTP/1.1
  User-Agent: Opera/9.80 (Windows NT 6.1; U; IBM EVV/3.0/EAK01AG9/LE; en) Presto/2.9.168 Version/11.51
  Host: localhost:8080
  Accept: application/xhtml+voice+xml;version=1.2, application/x-xhtml+voice+xml;version=1.2, text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
  Accept-Language: nl-NL,nl;q=0.9,en;q=0.8
  Accept-Encoding: gzip, deflate
  Connection: Keep-Alive
  </code></pre>
  
  <p>The connection also stays alive without any flaws by sending a request through http until I end it.</p>
  
  <p>Going through the JavaScript WebSocket API the server receives this request:</p>
  
  <pre><code>GET / HTTP/1.1
  Host: localhost:8080
  Origin: http://localhost
  Upgrade: WebSocket
  Sec-WebSocket-key1: L58(b Q]'9 4 9\  0 *+ 6 a4
  Connection: Upgrade
  Sec-WebSocket-Key2: \+ 1 5d/9541840N*4
  </code></pre>
  
  <p>My last guess would be Connection: upgrade or Upgrade: WebSocket not being supported properly by the client. To me it would be more logical to receive Connection: keep-alive but I have no idea how to reslove this.</p>