It works fine from here ;p
I strongly suspect that this is primarily the effect of down-level intermediary proxy servers mangling the web-socket request. In most cases... "squid". Basically, a web-socket request is meant to have something like (as http-headers):
Connection: Upgrade
Upgrade: websocket
plus some other headers, such as Sec-WebSocket-Version
and Sec-WebSocket-Key
for up-to-date implementations (RFC6455 and most of the Hybi versions), or Sec-WebSocket-Key1
and Sec-WebSocket-Key2
(for the early implementations, Hixie-76).
We even accept multi-value headers that we see in-the-field, such as:
Connection: Upgrade, Keep-Alive
Upgrade: websocket
even though that isn't really all that meaningful (it doesn't make sense to ask whether a web-socket connection has "keep alive" enabled). However, we get a constant stream of requests of the form:
Connection: Keep-Alive
(with no upgrade header), or
Connection: Keep-Alive
Upgrade: websocket
which are... not web-socket requests. I know that no web-socket aware browser issued that request, so it basically screams "dodgy proxy server". If you have a dodgy proxy server that doesn't know how to change protocol to web-sockets, then the chances are good that it would get very ill if we did change protocol, so if we see something obviously bad we kill the connection dead, to protect all parties.
Perhaps the best thing to do is to look at http://websocketstest.com - if that reports errors, then we can't help - your network infrastructure is actively preventing successful use of web-sockets. Also note the caveats from that page:
Antiviruses, firewalls and HTTP proxies may interfere WebSocket connections, sometimes rendering them useless.
The good news, however, is that we only use web-sockets for nice to have functionality. Web-sockets being down does not stop your usage of Stack Exchange - it just prevents instant updates. We also use web-sockets on the chat system, but we fallback to polling if we can't establish a web-sockets connection.