8. Error Handling (Fehlerbehandlung)
8.1 Handling Errors in UTF-8-Encoded Data (Behandlung von Fehlern in UTF-8-codierten Daten)
Beim Empfang eines Text-Frames (Opcode 0x1) müssen die Payload-Daten gültiger UTF-8-codierter Text sein.
UTF-8-Validierung
Implementierungen MÜSSEN validieren, dass empfangene Textdaten gültiges UTF-8 sind.
function isValidUTF8(buffer) {
try {
// Node.js wirft einen Fehler bei ungültigem UTF-8
const str = buffer.toString('utf8');
// Round-Trip-Konvertierung verifizieren
return Buffer.from(str, 'utf8').equals(buffer);
} catch (e) {
return false;
}
}
ws.on('message', (data, isBinary) => {
if (!isBinary && !isValidUTF8(data)) {
// Schließcode 1007 = Ungültige Frame-Payload-Daten
ws.close(1007, 'Invalid UTF-8 in text frame');
}
});
Fehlerbehandlungsprozess
Wenn ungültiges UTF-8 erkannt wird:
- Verarbeitung der Nachricht stoppen
- Close-Frame mit Statuscode 1007 senden
- Verbindung schließen
Andere häufige Fehler
Protokollverstöße
| Fehlertyp | Schließcode | Behandlung |
|---|---|---|
| Unmaskierten Client-Frame erhalten | 1002 | Verbindung sofort schließen |
| Maskierten Server-Frame erhalten | 1002 | Verbindung sofort schließen |
| Ungültiger Opcode | 1002 | Verbindung sofort schließen |
| Fragmentierter Kontroll-Frame | 1002 | Verbindung sofort schließen |
| Kontroll-Frame überschreitet 125 Bytes | 1002 | Verbindung sofort schließen |
| Ungültiges UTF-8 | 1007 | Close-Frame senden, dann schließen |
| Nachricht zu groß | 1009 | Close-Frame senden, dann schließen |
Best Practices für Fehlerbehandlung
ws.on('error', (error) => {
console.error('WebSocket-Fehler:', error);
// Fehler protokollieren
// Überwachungssystem benachrichtigen
});
ws.on('close', (code, reason) => {
if (code !== 1000 && code !== 1001) {
console.error(`Abnormale Schließung: ${code} - ${reason}`);
// Wiederverbindungslogik implementieren
setTimeout(() => reconnect(), 5000);
}
});
Referenzlinks
- Vorheriges Kapitel: 7. Closing the Connection (Verbindung schließen)
- Nächstes Kapitel: 9. Extensions (Erweiterungen)