Passa al contenuto principale

4.6. Utilizzo dei codici di stato HTTP

4.6. Utilizzo dei codici di stato HTTP

Le applicazioni che utilizzano HTTP DEVONO utilizzare solo codici di stato HTTP registrati. DOVREBBERO utilizzare il codice di stato più specifico applicabile, sebbene non siano limitate a quelli definiti in [HTTP]; altri codici di stato possono essere utilizzati purché siano registrati nel registro "HTTP Status Codes".

Quando si specifica come vengono utilizzati i codici di stato, le applicazioni DOVREBBERO concentrarsi sulla loro semantica generica piuttosto che sul loro significato specifico in un particolare contesto. Ad esempio, è appropriato dire:

Se la richiesta ha successo, il server invia una risposta 200 OK.

ma non:

Il server invia una risposta 200 OK quando l'utente è autenticato e autorizzato ad accedere alla risorsa.

Quest'ultimo è troppo specifico perché confonde diverse cose: successo, autenticazione e autorizzazione. Una dichiarazione più appropriata sarebbe:

Se la richiesta ha successo, il server invia una risposta 200 OK. Se è richiesta l'autenticazione ma non viene fornita, il server invia una risposta 401 Unauthorized. Se il client non è autorizzato ad accedere alla risorsa, il server invia una risposta 403 Forbidden.

Le applicazioni NON DOVREBBERO definire nuovi codici di stato. Nei rari casi in cui un nuovo codice di stato è veramente necessario, DEVE essere registrato seguendo la procedura in [HTTP] Sezione 16.2.

Quando si sceglie un codice di stato, il principio generale è selezionare il più specifico che si applica. Il codice di stato dovrebbe trasmettere la ragione principale della risposta.

Ad esempio, se una richiesta fallisce perché la risorsa non esiste, 404 Not Found è appropriato. Se fallisce perché il client non è autorizzato ad accedervi, 403 Forbidden è appropriato, anche se la risorsa potrebbe non esistere.

Le applicazioni DOVREBBERO utilizzare i seguenti codici di stato in modo appropriato:

  • 200 OK per richieste riuscite in cui la risposta contiene una rappresentazione.

  • 201 Created per richieste riuscite che risultano nella creazione di una nuova risorsa.

  • 202 Accepted per richieste che sono state accettate per l'elaborazione ma dove l'elaborazione non è stata completata.

  • 204 No Content per richieste riuscite dove non c'è rappresentazione da inviare.

  • 301 Moved Permanently o 308 Permanent Redirect per risorse che si sono spostate permanentemente.

  • 302 Found o 307 Temporary Redirect per risorse che si sono spostate temporaneamente.

  • 304 Not Modified per richieste condizionali dove la risorsa non è cambiata.

  • 400 Bad Request per richieste malformate.

  • 401 Unauthorized per richieste che richiedono autenticazione.

  • 403 Forbidden per richieste dove il client non è autorizzato.

  • 404 Not Found per richieste a risorse non esistenti.

  • 405 Method Not Allowed per richieste che utilizzano un metodo inappropriato.

  • 406 Not Acceptable quando il server non può generare una rappresentazione che il client accetterà.

  • 409 Conflict quando la richiesta è in conflitto con lo stato corrente della risorsa.

  • 410 Gone per risorse che esistevano ma sono state rimosse permanentemente.

  • 415 Unsupported Media Type quando il Content-Type della richiesta non è supportato.

  • 500 Internal Server Error per errori lato server.

  • 501 Not Implemented quando il server non supporta la funzionalità richiesta.

  • 503 Service Unavailable quando il server è temporaneamente incapace di gestire la richiesta.