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é :
- Arrêter le traitement du message
- Envoyer une trame Close avec le code d'état 1007
- Fermer la connexion
Autres erreurs courantes
Violations de protocole
| Type d'erreur | Code de fermeture | Traitement |
|---|---|---|
| Trame client non masquée reçue | 1002 | Fermer immédiatement la connexion |
| Trame serveur masquée reçue | 1002 | Fermer immédiatement la connexion |
| Opcode invalide | 1002 | Fermer immédiatement la connexion |
| Trame de contrôle fragmentée | 1002 | Fermer immédiatement la connexion |
| Trame de contrôle dépassant 125 octets | 1002 | Fermer immédiatement la connexion |
| UTF-8 invalide | 1007 | Envoyer trame Close puis fermer |
| Message trop volumineux | 1009 | Envoyer 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
- Chapitre précédent : 7. Closing the Connection (Fermeture de la connexion)
- Chapitre suivant : 9. Extensions