IE10 закрывает соединение после рукопожатия - PullRequest
4 голосов
/ 25 февраля 2012

я реализовал сервер websocket в libevent, и хотя у меня нет проблем с Chrome или Firefox, с IE10 я даже не могу установить соединение.

Здесь Рукопожатия:

IE10 Request:
GET /echo HTTP/1.1
Origin: 95.115.195.4
Sec-WebSocket-Key: rgPWUlUtk+h3CPWqk99OtA==
Connection: Upgrade
Upgrade: Websocket
Sec-WebSocket-Version: 8
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
Host: 95.115.195.4:5555
Cache-Control: no-cache

Server Response:
HTTP/1.1 101 Switching Protocols
Upgrade: Websocket
Connection: Upgrade
Sec-WebSocket-Accept: jGmgQ/jOvew8MU9o3bbqPG9PHlY=
Sec-WebSocket-Protocol: chat

Отладчик IE10 говорит: SCRIPT12152: Ошибка WebSocket: неверный HTTP-ответ. Код состояния 101

Кто-нибудь знает, что я делаю не так?

Спасибо

1 Ответ

5 голосов
/ 26 февраля 2012

Клиент не отправил список суб-протоколов, но ваш сервер отправил обратно "chat" в качестве значения суб-протокола.Согласно стр. 19 спецификации IETF 6455 WebSocket (конец раздела 4.1 Требования к клиенту):

6.  If the response includes a |Sec-WebSocket-Protocol| header field
   and this header field indicates the use of a subprotocol that was
   not present in the client's handshake (the server has indicated a
   subprotocol not requested by the client), the client MUST _Fail
   the WebSocket Connection_.

Сервер должен отправлять только заголовок "Sec-WebSocket-Protocol: SUBPROTOCOL" обратноклиенту, если клиент отправил на сервер заголовок «Sec-WebSocket-Protocol: SUBPROTOCOL, ...».Обратите внимание, что клиент может отправить список подпротоколов, и если это произойдет, сервер должен выбрать один из списка для ответа.

Возможно, Firefox и Chrome слишком мягки и не придерживаютсятекущая версия спецификации.

...