Zum Hauptinhalt springen

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:

  1. Verarbeitung der Nachricht stoppen
  2. Close-Frame mit Statuscode 1007 senden
  3. Verbindung schließen

Andere häufige Fehler

Protokollverstöße

FehlertypSchließcodeBehandlung
Unmaskierten Client-Frame erhalten1002Verbindung sofort schließen
Maskierten Server-Frame erhalten1002Verbindung sofort schließen
Ungültiger Opcode1002Verbindung sofort schließen
Fragmentierter Kontroll-Frame1002Verbindung sofort schließen
Kontroll-Frame überschreitet 125 Bytes1002Verbindung sofort schließen
Ungültiges UTF-81007Close-Frame senden, dann schließen
Nachricht zu groß1009Close-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);
}
});