Passa al contenuto principale

11. Gestione degli errori

11. Gestione degli errori

Un endpoint che rileva un errore DOVREBBE segnalare l'esistenza di tale errore al suo peer. Sia gli errori a livello di trasporto che quelli a livello di applicazione possono influenzare un'intera connessione; vedere Sezione 11.1. Solo gli errori a livello di applicazione possono essere isolati a un singolo stream; vedere Sezione 11.2.

Il codice di errore più appropriato (Sezione 20) DOVREBBE essere incluso nel frame che segnala l'errore. Dove questa specifica identifica condizioni di errore, identifica anche il codice di errore utilizzato.

Un reset senza stato (Sezione 10.3) non è adatto per alcun errore che può essere segnalato con un frame CONNECTION_CLOSE o RESET_STREAM. Un reset senza stato NON DEVE essere utilizzato da un endpoint che dispone dello stato necessario per inviare un frame sulla connessione.

11.1 Errori di connessione

Gli errori che rendono la connessione inutilizzabile, come una violazione evidente della semantica del protocollo o una corruzione dello stato che influisce su un'intera connessione, DEVONO essere segnalati utilizzando un frame CONNECTION_CLOSE (Sezione 19.19).

Un endpoint PUÒ chiudere la connessione in questo modo, anche se l'errore influisce solo su un singolo stream.

Un endpoint DEVE limitare il numero di frame di errore che invia. Un endpoint PUÒ inviare un frame CONNECTION_CLOSE in un pacchetto che contiene solo quel frame, e DOVREBBE inviarlo in risposta alla ricezione di un frame CONNECTION_CLOSE.

11.2 Errori di stream

Se un errore a livello di applicazione influisce su un singolo stream, ma lascia altrimenti la connessione in uno stato recuperabile, l'endpoint può inviare un frame RESET_STREAM (Sezione 19.4) con un codice di errore appropriato per terminare solo lo stream interessato.

RESET_STREAM DEVE essere avviato dall'applicazione, sebbene i motivi per inviare RESET_STREAM potrebbero includere il rilevamento di un errore nello stream da parte del trasporto.

A parte RESET_STREAM, un endpoint NON DEVE inviare un frame su uno stream nello stato "Reset Sent" o in qualsiasi stato terminale -- cioè, dopo aver inviato un frame RESET_STREAM.