Pergunta

implementei um servidor websocket no libevent e embora não tenha problemas com o Chrome ou Firefox, com o IE10 nem consigo estabelecer uma conexão.

Aqui os apertos de mão:

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

O depurador do IE10 diz:SCRIPT12152:Erro WebSocket:Resposta HTTP incorreta.Código de status 101

Alguém sabe o que estou fazendo de errado?

Obrigado

Foi útil?

Solução

O cliente não enviou uma lista de subprotocolos, mas seu servidor enviou de volta "chat" como o valor do subprotocolo.De acordo com a página 19 do Especificação IETF 6455 WebSocket (fim da seção 4.1 Requisitos do Cliente):

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_.

O servidor deve enviar apenas o "Protocolo Sec-WebSocket:SUBPROTOCOL" de volta ao cliente se o cliente enviou um "Sec-WebSocket-Protocol:SUBPROTOCOL,..." para o servidor.Observe que o cliente pode enviar uma lista de subprotocolos e, se isso acontecer, o servidor deverá selecionar um da lista para responder.

É possível que o Firefox e o Chrome estejam sendo muito tolerantes e não aderindo à versão atual das especificações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top