Question

J'ai implémenté un serveur WebSocket dans LiBevent et même si je n'ai aucun problème avec Chrome ou Firefox, avec IE10, je ne suis même pas en mesure d'établir une connexion.

Ici les poignées de main:

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

Le débogueur IE10 dit: Script12152: Erreur WebSocket: réponse HTTP incorrecte. Code d'état 101

Quelqu'un sait ce que je fais de mal?

Merci

Était-ce utile?

La solution

Le client n'a pas envoyé de liste de sous-protocoles, mais votre serveur a renvoyé "CHAT" comme valeur de sous-protocole. Selon la page 19 de IETF 6455 Websocket Spec (Fin de la section 4.1 Exigences du client):

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

Le serveur ne doit renvoyer l'en-tête "SEC-WebSocket-Protocol: Subprotocol" au client si le client envoyait un en-tête "Sec-WebSocket-Protocol: sous-protocole, ..." au serveur. Notez que le client peut envoyer une liste de sous-protocoles, et si c'est le cas, le serveur doit en sélectionner un dans la liste pour répondre.

Il est possible que Firefox et Chrome soient trop indulgents et ne respectant pas la version actuelle de la spécification.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top