* Request headers are processed on each request. Even with keep-alive connections the request headers are sent/processed
* Message latency can be much higher in poor conditions because multiple requests have to complete to complete a loop (I think it's 3 connections and each connection can potentially be re-sent which means it can take several round trips)
* Not fully duplex connection, you can't send and receive data at the same time on 1 connection
* Domain limits imposed by browsers apply
* edit: binary message protocol can't be used
It's better for some use cases:
* Easier to implement (standard HTTP). WS is definitely much more complex to implement
* Easier to deploy (standard load balancers / proxies should work well)
* Takes advantage of keep-alive