В настоящее время существует 2 поддерживаемых черновика API WebSocket.
Draft75 , который поддерживается связанным скриптом PHP, и Draft76 , для которого требуется другой заголовок обновления и рукопожатие, еще один Draft77 также завершен и может быть внезапно и полностью реализован браузером.
Где-то между версиями 5 и 6 Chrome они переключились с Draft75 на Draft76 .
Насколько я вижу здесь, PHP Script не прерывает соединение, когда получает неверный заголовок обновления. Поэтому Chrome все еще будет ждать рукопожатия, что объясняет, пока состояние ReadyState не меняется.