WebSocket

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Websocket)
Aller à : navigation, rechercher

WebSocket est un standard du Web dont la spécification est en cours de définition désignant un protocole réseau[1] de la couche application et une interface de programmation du World Wide Web. Le protocole a été normalisé par l'IETF dans la RFC 6455 et l'interface de programmation est en cours de standardisation par le W3C.

Le protocole WebSocket[modifier | modifier le code]

Le protocole WebSocket vise à développer un canal de communication full-duplex sur un socket TCP pour les navigateurs et les serveurs web.

Le besoin d'une communication web bidirectionnelle, client / serveur[modifier | modifier le code]

L'interactivité croissante des applications web, consécutive à l'amélioration des performances des navigateurs, a rapidement rendu nécessaire le développement de techniques de communications bidirectionnelles entre l'application web et les processus serveur. Des techniques basées sur l'appel par le client de l'objet XMLHttpRequest et utilisant des requêtes HTTP avec un long TTL stockées par le serveur pour une réponse ultérieure au client ont permis de pallier ce manque et ont été popularisées par le succès des architectures Ajax.

Le potentiel de la technologie[modifier | modifier le code]

Le Websocket proposera à terme une implémentation native et unifiée dans les navigateurs et serveurs web d'un canal bidirectionnel permettant :

  • la notification au client d'un changement d'état du serveur
  • l'envoi de données en mode « pousser » (méthode Push) du serveur vers le client (sans que ce dernier ait à effectuer une requête)

L'API WebSocket[modifier | modifier le code]

L'interface de programmation WebSocket est une spécification en cours au sein du WHATWG[2] et sera publiée par le W3C une fois terminée.

Implémentations[modifier | modifier le code]

  • GNU WebSocket4J, une implémentation du protocole WebSocket en Java.
  • Apache WebSocket module[3], une implémentation en langage C sous la forme d'une extension pour le serveur httpd Apache (mod_websocket).
  • pywebsocket[4], une implémentation en Python sous la forme d'une extension pour le serveur httpd Apache (mod_pywebsocket).
  • jWebSocket, implémentation Java côté serveur et JavaScript/HTML5 côté client[5].
  • APE Project, support du protocole WebSocket (-hixie-75, -hixie-76, -hybi-ietf-06, -hybi-ietf-07)[6].
  • QtWebsocket, une implémentation client et serveur du protocole Websocket en C++ (nécessite le framework Qt).
  • phpwebsocket, implémentation PHP côté serveur et PHP/HTML5 côté client[7].
  • Pusher, implémentation sous forme d'API compatible avec la plupart des langages et sous forme d'un service gratuit et payant.
  • SignalR, implementation pour ASP.NET en C#.
  • Protocol::WebSocket, implémentation Perl du protocole.

Le protocole est par ailleurs en cours d'implémentation dans les navigateurs suivants : Firefox 4, Google Chrome 4 et Safari 5.

Implémentation dans les navigateurs [8][modifier | modifier le code]

Caractéristiques Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support de la version -76 6 4.0 (2.0) Pas de support 11.00 (désactivé) 5.0.1
Support de la version du protocole 7 Pas de support 6.0 HTML5 Labs Pas de support Pas de support
Support de la version du Protocole 10 14 7.0  ?  ?
Standard - RFC 6455 Support 16 11.0 10 12.10 6

Polémique de sécurité[modifier | modifier le code]

Une faille de sécurité a été découverte au sein de l'API des premières versions de websocket. La sécurité était compromise lors de la navigation en remplaçant pendant la phase de « handshake » un fichier JavaScript par un malware. Cette faille se situant au niveau de l'API elle-même [9], elle ne pouvait pas être corrigée par un quelconque correctif au sein du navigateur. Dans certaines versions des navigateur comme Firefox 4 et 5, Opera 11 et Internet Explorer 9, WebSocket a été désactivé à cause de cette faille.

Notes et références[modifier | modifier le code]

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]