Aller au contenu principal

RFC 6455 - The WebSocket Protocol (Le Protocole WebSocket)

Date de publication : Décembre 2011
Statut : Standards Track
Auteurs : I. Fette (Google Inc.), A. Melnikov (Isode Ltd.)


Résumé (Abstract)

Le protocole WebSocket (WebSocket Protocol) permet une communication bidirectionnelle simultanée (Full-Duplex Communication) entre un client et un serveur sur une seule connexion TCP. Le protocole WebSocket est conçu pour être implémenté dans les navigateurs web et les serveurs web, mais il peut être utilisé par n'importe quelle application client ou serveur.

Le protocole WebSocket est un protocole indépendant basé sur TCP. Sa seule relation avec HTTP est que sa poignée de main (Handshake) est interprétée par les serveurs HTTP comme une requête de mise à niveau (Upgrade Request).


Table des matières (Table of Contents)


Ressources supplémentaires


RFC connexes

  • RFC 6455 : The WebSocket Protocol ← Ce document
  • RFC 7692 : WebSocket Compression Extensions (Extensions de compression WebSocket)
  • RFC 8441 : Bootstrapping WebSockets with HTTP/2 (Amorçage de WebSockets avec HTTP/2)

Référence rapide

Format d'URI WebSocket

ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ]
  • ws:// - Connexion non chiffrée (port par défaut 80)
  • wss:// - Connexion chiffrée TLS (port par défaut 443, recommandé pour la production)

Exemple de poignée de main

Requête du client :

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Origin: http://example.com

Réponse du serveur :

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

Types de trames (Opcode)

OpcodeTypeDescription
0x0ContinuationTrame de continuation
0x1TextTrame de texte (UTF-8)
0x2BinaryTrame binaire
0x8CloseTrame de fermeture
0x9PingTrame Ping (battement de cœur)
0xAPongTrame Pong (réponse au battement de cœur)

Codes d'état de fermeture

CodeNomDescription
1000Normal ClosureFermeture normale
1001Going AwayPoint de terminaison partant (par exemple, navigation de page)
1002Protocol ErrorErreur de protocole
1003Unsupported DataType de données non supporté
1006Abnormal ClosureFermeture anormale (aucune trame Close envoyée)
1009Message Too BigMessage trop volumineux
1011Internal ErrorErreur interne du serveur

Structure de trame (Format de base)

 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/64) |
|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 |
+-------------------------------+-------------------------------+

Points clés :

  • FIN : 1=trame finale, 0=trames suivantes
  • MASK : doit être 1 pour client→serveur, doit être 0 pour serveur→client
  • Opcode : Identifiant du type de trame
  • Payload Length : Longueur des données (0-125 direct, 126 utilise 16 bits, 127 utilise 64 bits)

Terminologie principale

Terme anglaisTerme françaisDescription
Full-Duplex CommunicationCommunication bidirectionnelle simultanéeCommunication bidirectionnelle simultanée
Opening HandshakePoignée de main d'ouvertureProcessus de mise à niveau HTTP vers WebSocket
Closing HandshakePoignée de main de fermetureProcessus de fermeture gracieuse de la connexion
FrameTrameUnité de base de transmission de données
MessageMessageComposé d'une ou plusieurs trames
MaskingMasquageLes données du client doivent être masquées (mécanisme de sécurité)
FragmentationFragmentationMessages volumineux transmis en plusieurs trames