En quoi le nouveau protocole WebSocket est-il différent ?

La spécification du protocole WebSocket a récemment été mise à jour pour résoudre les problèmes de sécurité précédents. Elle est désormais largement stable. Vous trouverez ci-dessous un résumé des modifications apportées, ainsi que quelques remarques sur les implémentations actuelles.

Qu'est-ce qui a changé depuis WebSocket HyBi 00 ?

  • Le format de la trame de protocole a été modifié. HyBi 00 utilisait "0x00" pour la tête et "0xff" pour la queue pour chaque frame. HyBi 10 utilise désormais un nouveau format, comme celui-ci:
      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-------+-+-------------+-------------------------------+
     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
     |I|S|S|S|  (4)  |A|     (7)     |             (16/63)           |
     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
     | |1|2|3|       |K|             |                               |
     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
     |     Extended payload length continued, if payload len == 127  |
     + - - - - - - - - - - - - - - - +-------------------------------+
     |                               |Masking-key, if MASK set to 1  |
     +-------------------------------+-------------------------------+
     | Masking-key (continued)       |          Payload Data         |
     +-------------------------------- - - - - - - - - - - - - - - - +
     :                     Payload Data continued ...                :
     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
     |                     Payload Data continued ...                |
     +---------------------------------------------------------------+

Les problèmes de sécurité ont été résolus

  • Sec-WebSocket-Key et Sec-WebSocket-Accept sont ajoutés à la place des trois clés d'HyBi 00. Le navigateur transmet un nombre généré de manière aléatoire à Sec-WebSocket-Key. Le serveur l'utilise ensuite avec le GUID spécifique du protocole WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) et SHA1 / BASE64, etc. pour renvoyer Sec-WebSocket-Accept afin que le navigateur puisse confirmer qu'il comprend WebSocket. Cela empêche une attaque interprotocole.
  • Le masquage de frame est désormais obligatoire pour chaque frame. Cela évite l'empoisonnement du cache sur le proxy. Sec-WebSocket-Origin est ajouté pour empêcher l'accès des scripts dont le fournisseur de services n'a pas connaissance.
  • Sec-WebSocket-Origin est ajouté à la place de la clé d'origine de HyBi 00 pour empêcher l'accès des scripts dont le fournisseur de services n'a pas connaissance. Notez que ce sera simplement "Origin" sur HyBi 11.

Modifications apportées à l'API JavaScript

  • subprotocol peut désormais être un tableau, ce qui permet d'utiliser une signature de méthode new WebSocket(String url, Array subprotocol).
  • Attribut .protocol [Chaîne]
  • Attribut .binaryType [Blob|ArrayBuffer]
  • .extension [Chaîne]
  • Le code d'état et la raison (pourquoi la connexion est fermée) ont été ajoutés à CloseEvent. La fonction close() a également été modifiée pour accepter ces deux arguments.

Extensions

  • Sec-WebSocket-Extensions a été ajouté. Les extensions proposées sont les suivantes:
  • deflate-frame compresse les images à la source et les extrait à la destination.
  • x-google-mux pour prendre en charge le multiplexage, mais il en est encore à ses débuts.

La compatibilité entre HyBi 00 et HyBi 10 est-elle possible à la fois pour l'implémentation du serveur et du navigateur ?

  • Les implémentations de serveur peuvent prendre en charge HyBi 00 et HyBi 10 en examinant l'en-tête HTTP de l'établissement de la liaison. Toutefois, il est déconseillé de prendre en charge HyBi 00, car il est connu pour être vulnérable.
  • L'API JavaScript WebSocket est largement similaire entre les anciennes et les nouvelles versions. Toutefois, comme indiqué ci-dessus, nous vous déconseillons de prendre en charge HyBi 00, car il est connu pour être vulnérable.

Quel navigateur est compatible avec HyBi 10 ?

  • Chrome 14 est compatible avec le protocole HyBi 10, bien que les modifications de l'API JavaScript WebSocket mentionnées ci-dessus ne soient pas encore disponibles. Firefox 7 devrait également prendre en charge HyBi 10.