Passa al contenuto principale

8. Gestione degli errori (Error Handling)

Quando un flusso non può essere completato con successo, QUIC consente all'applicazione di terminare bruscamente (reimpostare) quel flusso e comunicare un motivo; vedere la Sezione 2.4 di [QUIC-TRANSPORT]. Questo è chiamato "errore di flusso (Stream Error)". Un'implementazione HTTP/3 può decidere di chiudere un flusso QUIC e comunicare il tipo di errore. Le codifiche su rete dei codici di errore sono definite nella Sezione 8.1. Gli errori di flusso sono distinti dai codici di stato HTTP che indicano condizioni di errore. Gli errori di flusso indicano che il mittente non ha trasferito o consumato la richiesta o risposta completa, mentre i codici di stato HTTP indicano il risultato di una richiesta ricevuta con successo.

Se è necessario terminare un'intera connessione, QUIC fornisce meccanismi simili per comunicare un motivo; vedere la Sezione 5.3 di [QUIC-TRANSPORT]. Questo è chiamato "errore di connessione (Connection Error)". Simile agli errori di flusso, un'implementazione HTTP/3 può terminare una connessione QUIC e comunicare il motivo utilizzando un codice di errore dalla Sezione 8.1.

Sebbene i motivi per chiudere flussi e connessioni siano chiamati "errori", queste azioni non indicano necessariamente un problema con la connessione o con una delle implementazioni. Ad esempio, un flusso può essere reimpostato se la risorsa richiesta non è più necessaria.

Un endpoint PUÒ (MAY) scegliere di trattare un errore di flusso come un errore di connessione in determinate circostanze, chiudendo l'intera connessione in risposta a una condizione su un singolo flusso. Le implementazioni devono considerare l'impatto sulle richieste in sospeso prima di fare questa scelta.

Poiché nuovi codici di errore possono essere definiti senza negoziazione (vedere la Sezione 9), l'uso di un codice di errore in un contesto imprevisto o la ricezione di un codice di errore sconosciuto DEVE (MUST) essere trattato come equivalente a H3_NO_ERROR. Tuttavia, la chiusura di un flusso può avere altri effetti indipendentemente dal codice di errore; ad esempio, vedere la Sezione 4.1.

8.1. Codici di errore HTTP/3 (HTTP/3 Error Codes)

I seguenti codici di errore sono definiti per l'uso quando si terminano bruscamente i flussi, si interrompe la lettura dei flussi o si chiudono immediatamente le connessioni HTTP/3.

H3_NO_ERROR (0x0100)
Nessun errore. Utilizzato quando la connessione o il flusso deve essere chiuso, ma non c'è alcun errore da segnalare.

H3_GENERAL_PROTOCOL_ERROR (0x0101)
Il peer ha violato i requisiti del protocollo in un modo che non corrisponde a un codice di errore più specifico o l'endpoint rifiuta di utilizzare il codice di errore più specifico.

H3_INTERNAL_ERROR (0x0102)
Si è verificato un errore interno nello stack HTTP.

H3_STREAM_CREATION_ERROR (0x0103)
L'endpoint ha rilevato che il suo peer ha creato un flusso che non accetterà.

H3_CLOSED_CRITICAL_STREAM (0x0104)
Un flusso richiesto dalla connessione HTTP/3 è stato chiuso o reimpostato.

H3_FRAME_UNEXPECTED (0x0105)
È stato ricevuto un frame che non era consentito nello stato corrente o sul flusso corrente.

H3_FRAME_ERROR (0x0106)
È stato ricevuto un frame che non soddisfa i requisiti di layout o con una dimensione non valida.

H3_EXCESSIVE_LOAD (0x0107)
L'endpoint ha rilevato che il suo peer sta mostrando un comportamento che potrebbe generare un carico eccessivo.

H3_ID_ERROR (0x0108)
Un ID di flusso o un ID push è stato utilizzato in modo errato, ad esempio superando un limite, riducendo un limite o venendo riutilizzato.

H3_SETTINGS_ERROR (0x0109)
Un endpoint ha rilevato un errore nel payload di un frame SETTINGS.

H3_MISSING_SETTINGS (0x010a)
Nessun frame SETTINGS è stato ricevuto all'inizio del flusso di controllo.

H3_REQUEST_REJECTED (0x010b)
Un server ha rifiutato una richiesta senza eseguire alcuna elaborazione dell'applicazione.

H3_REQUEST_CANCELLED (0x010c)
La richiesta o la sua risposta (inclusa la risposta push) è annullata.

H3_REQUEST_INCOMPLETE (0x010d)
Il flusso del client è terminato senza contenere una richiesta completamente formata.

H3_MESSAGE_ERROR (0x010e)
Un messaggio HTTP era malformato e non può essere elaborato.

H3_CONNECT_ERROR (0x010f)
La connessione TCP stabilita in risposta a una richiesta CONNECT è stata reimpostata o chiusa in modo anomalo.

H3_VERSION_FALLBACK (0x0110)
L'operazione richiesta non può essere servita tramite HTTP/3. Il peer dovrebbe riprovare tramite HTTP/1.1.

I codici di errore nel formato 0x1f * N + 0x21 per valori interi non negativi di N sono riservati per esercitare il requisito che i codici di errore sconosciuti vengano trattati come equivalenti a H3_NO_ERROR (Sezione 9). Le implementazioni DOVREBBERO (SHOULD) selezionare un codice di errore da questo spazio con una certa probabilità quando avrebbero inviato H3_NO_ERROR.