Aller au contenu principal

8. Error Handling (Gestion des erreurs)

8.1 Handling Errors in UTF-8-Encoded Data (Gestion des erreurs dans les données encodées en UTF-8)

Lors de la réception d'une trame Text (Opcode 0x1), les données de charge utile doivent être du texte encodé UTF-8 valide.

Validation UTF-8

Les implémentations DOIVENT valider que les données texte reçues sont en UTF-8 valide.

function isValidUTF8(buffer) {
try {
// Node.js lance une erreur sur UTF-8 invalide
const str = buffer.toString('utf8');
// Vérifier la conversion aller-retour
return Buffer.from(str, 'utf8').equals(buffer);
} catch (e) {
return false;
}
}

ws.on('message', (data, isBinary) => {
if (!isBinary && !isValidUTF8(data)) {
// Code de fermeture 1007 = Données de charge utile de trame invalides
ws.close(1007, 'Invalid UTF-8 in text frame');
}
});

Processus de gestion des erreurs

Lorsqu'un UTF-8 invalide est détecté :

  1. Arrêter le traitement du message
  2. Envoyer une trame Close avec le code d'état 1007
  3. Fermer la connexion

Autres erreurs courantes

Violations de protocole

Type d'erreurCode de fermetureTraitement
Trame client non masquée reçue1002Fermer immédiatement la connexion
Trame serveur masquée reçue1002Fermer immédiatement la connexion
Opcode invalide1002Fermer immédiatement la connexion
Trame de contrôle fragmentée1002Fermer immédiatement la connexion
Trame de contrôle dépassant 125 octets1002Fermer immédiatement la connexion
UTF-8 invalide1007Envoyer trame Close puis fermer
Message trop volumineux1009Envoyer trame Close puis fermer

Meilleures pratiques de gestion des erreurs

ws.on('error', (error) => {
console.error('Erreur WebSocket:', error);
// Enregistrer l'erreur
// Notifier le système de surveillance
});

ws.on('close', (code, reason) => {
if (code !== 1000 && code !== 1001) {
console.error(`Fermeture anormale: ${code} - ${reason}`);
// Implémenter la logique de reconnexion
setTimeout(() => reconnect(), 5000);
}
});

Liens de référence