Che cos'è una HTTP Response? Guida agli HTTP Response Status Code

Pubblicato 26 gennaio 2026

Le risposte HTTP sono una parte importante della comunicazione web, permettendo ai server di rispondere alle richieste dei client con i dati richiesti, informazioni sullo stato e altri dettagli chiave. Questo articolo spiegherà la struttura e le parti di una risposta HTTP, inclusa la riga di stato, gli header e il body. Vedremo i diversi gruppi di codici di stato HTTP e i loro significati, con esempi reali per mostrare come vengono utilizzati. Parleremo anche dei modi corretti per gestire le risposte HTTP nello sviluppo web, sia lato client che lato server, per assicurare una buona comunicazione tra client e server.

Punti Chiave

  • Una risposta HTTP è il messaggio che un web server invia a un client dopo aver ricevuto ed elaborato una richiesta HTTP.
  • I componenti chiave di una risposta HTTP includono la riga di stato, gli header e un body facoltativo che contiene il contenuto richiesto.
  • I codici di stato HTTP sono categorizzati in risposte informative (1xx), risposte di successo (2xx), messaggi di reindirizzamento (3xx), risposte di errore del client (4xx) e risposte di errore del server (5xx).
  • Dal lato client, è importante controllare i codici di stato, elaborare i dati della risposta in base all'header Content-Type e gestire i reindirizzamenti e gli errori in modo appropriato.
  • Dal lato server, impostare i codici di stato e gli header corretti, fornire messaggi di errore chiari e implementare una corretta gestione degli errori e del logging sono aspetti fondamentali per uno sviluppo web efficace.

Cos'è una Risposta HTTP?

Una risposta HTTP è il messaggio che un web server invia a un client dopo aver ricevuto ed elaborato una richiesta HTTP. Fornisce il risultato della richiesta del client, che sia un successo, un fallimento o qualcosa nel mezzo. La risposta include informazioni sullo stato della richiesta e può anche avere contenuto nel suo body, come la risorsa richiesta (una pagina web, un'immagine, dati JSON, ecc.) o un messaggio di errore.

Le risposte HTTP sono necessarie affinché un client possa capire se la sua richiesta ha avuto successo o meno e quale sia stato il risultato di quella richiesta. I browser web usano le risposte HTTP per sapere quale contenuto mostrare agli utenti. Le API usano le risposte HTTP per indicare il risultato delle operazioni e per restituire dati. La struttura e il contenuto della risposta HTTP determinano come il client procede.

Componenti di una Risposta HTTP

Una risposta HTTP è composta da diversi componenti chiave:

  1. Riga di Stato: La prima riga della risposta, che include la versione HTTP, un codice di stato e un messaggio di stato.
  2. Header: Coppie chiave-valore che forniscono informazioni aggiuntive sulla risposta, come il tipo di contenuto, la lunghezza del contenuto, le direttive di caching e altro.
  3. Body (facoltativo): Il contenuto vero e proprio della risposta, come HTML, JSON, un'immagine, ecc.

Ecco un esempio di una semplice risposta HTTP:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<!DOCTYPE html>
<html>
  <head>
    <title>Pagina di Esempio</title>
  </head>
  <body>
    <h1>Ciao, Mondo!</h1>
    <p>Questa è una pagina di esempio.</p>
  </body>
</html>

Esempi Reali

  1. Navigazione Web: Quando inserisci un URL nel tuo browser web, questo invia una richiesta HTTP al server. Il server risponde poi con una risposta HTTP che include il contenuto HTML della pagina web. Il tuo browser usa questa risposta per visualizzare la pagina.

  2. Interazione con API: Quando un'applicazione fa una richiesta a un endpoint API, il server API risponde con una risposta HTTP. Questa risposta spesso include dati JSON che l'applicazione può utilizzare. Per esempio, un'app meteo potrebbe fare una richiesta a un'API meteo e ricevere i dati meteo attuali nella risposta.

  3. Download di File: Quando clicchi su un link per scaricare un file, il tuo browser invia una richiesta HTTP al server. Il server risponde con una risposta HTTP che include i dati del file nel body e header che indicano il tipo e la dimensione del file.

Componenti di una Risposta HTTP

Una risposta HTTP ha diverse parti chiave che forniscono informazioni sul risultato della richiesta e consegnano i dati richiesti.

Riga di Stato

La riga di stato è la prima riga della risposta HTTP. Include:

  • Versione HTTP: Mostra la versione del protocollo HTTP utilizzata, come HTTP/1.1 o HTTP/2.
  • Codice di Stato: Un numero di tre cifre che indica il risultato della richiesta, come 200 per successo, 404 per "non trovato" o 500 per un errore del server.
  • Testo di Stato: Una breve descrizione del codice di stato, come "OK" per 200, "Not Found" per 404 o "Internal Server Error" per 500.

Ecco alcuni codici di stato HTTP comuni e i loro significati:

Codice di Stato Testo di Stato Significato
200 OK La richiesta ha avuto successo e il body della risposta contiene i dati.
201 Created La richiesta ha avuto successo ed è stata creata una nuova risorsa.
301 Moved Permanently La risorsa richiesta è stata spostata permanentemente a un nuovo URL.
400 Bad Request Il server non ha potuto comprendere la richiesta a causa di una sintassi non valida.
401 Unauthorized La richiesta richiede l'autenticazione dell'utente.
404 Not Found Il server non ha potuto trovare la risorsa richiesta.
500 Internal Server Error Il server ha riscontrato un errore imprevisto.

Il codice di stato HTTP fa parte del messaggio di risposta. Definisce la classe di risposta e svolge un ruolo di categorizzazione. La prima cifra del codice di stato indica il tipo di risposta:

  • 1xx: Risposta informativa
  • 2xx: Successo
  • 3xx: Reindirizzamento
  • 4xx: Errore del client
  • 5xx: Errore del server

I codici di stato HTTP sono estensibili, ma le applicazioni HTTP non sono tenute a comprendere il significato di tutti i codici di stato registrati. Informazioni aggiuntive sulla risposta possono essere trovate nei campi header della risposta.

Header di Risposta

Dopo la riga di stato ci sono gli header di risposta. Sono coppie chiave-valore che forniscono maggiori dettagli sulla risposta. Alcuni header comuni includono:

  • Server: Il tipo di server che ha generato la risposta, come "Apache/2.4.41 (Ubuntu)".
  • Content-Type: Il tipo MIME dei dati nel body della risposta, come "text/html" per HTML o "application/json" per JSON.
  • Content-Length: La dimensione del body della risposta in byte.
  • Cache-Control: Direttive per i meccanismi di caching, specificando se la risposta può essere memorizzata in cache, per quanto tempo, ecc. Per esempio, "max-age=3600" significa che la risposta può essere memorizzata in cache per un'ora.
  • Set-Cookie: Invia cookie dal server al client, come "session_id=abc123; Expires=Wed, 21 Jun 2023 07:28:00 GMT".

Riga Vuota

Dopo gli header, c'è una riga vuota. Questa riga vuota segnala la fine della sezione degli header della risposta.

Body della Risposta

Dopo la riga vuota c'è il body della risposta. Contiene i dati effettivi che sono stati richiesti, come:

  • Un file HTML per una pagina web:

    <!DOCTYPE html>
    <html>
      <head>
        <title>Pagina di Esempio</title>
      </head>
      <body>
        <h1>Benvenuto nella Pagina di Esempio</h1>
        <p>Questo è un esempio di body di risposta HTML.</p>
      </body>
    </html>
    
  • Dati JSON per una risposta API:

    {
      "name": "Mario Rossi",
      "age": 30,
      "city": "Roma"
    }
    
  • Un'immagine, un video o altri file multimediali.

  • Un file da scaricare, come un PDF o un archivio ZIP.

Se la risposta indica un errore, come un codice di stato 404 o 500, il body potrebbe contenere un messaggio di errore che fornisce maggiori dettagli sul problema, come:

<!DOCTYPE html>
<html>
  <head>
    <title>404 Non Trovato</title>
  </head>
  <body>
    <h1>404 Non Trovato</h1>
    <p>La risorsa richiesta non è stata trovata su questo server.</p>
  </body>
</html>

Il body della risposta è facoltativo. Per alcune richieste, come una richiesta HEAD o una risposta 204 "No Content", non ci sarà alcun body.

Categorie dei Codici di Stato delle Risposte HTTP

I codici di stato delle risposte HTTP sono divisi in cinque categorie in base alla loro prima cifra. Ogni categoria rappresenta una diversa classe di risposte.

Risposte informative (100-199)

I codici di stato nell'intervallo 100-199 significano che il server ha ricevuto la richiesta e la sta elaborando. Questi codici sono risposte. Alcuni codici di stato informativi comuni includono:

Codice di Stato Descrizione
100 Continue Il server ha ricevuto gli header della richiesta e il client dovrebbe inviare il body della richiesta.
102 Processing Il server ha ricevuto e sta elaborando la richiesta, ma non è ancora disponibile alcuna risposta.

Scenario di esempio:

  • Un client invia una richiesta POST con un payload grande. Il server risponde con un codice di stato 100 Continue per dire al client di inviare il body della richiesta.

Risposte di successo (200-299)

I codici di stato nell'intervallo 200-299 significano che il server ha ricevuto, compreso e accettato la richiesta. Alcuni codici di stato di successo comuni includono:

Codice di Stato Descrizione
200 OK La richiesta ha avuto successo e il body della risposta contiene i dati richiesti.
201 Created La richiesta ha avuto successo ed è stata creata una nuova risorsa. Questo è comunemente usato come risposta a una richiesta POST.
204 No Content Il server ha soddisfatto la richiesta ma non ha bisogno di restituire alcun contenuto.

Scenari di esempio:

  • Un client richiede una pagina web usando una richiesta GET. Il server risponde con un codice di stato 200 OK e restituisce il contenuto HTML.
  • Un client invia un modulo per creare una nuova risorsa usando una richiesta POST. Il server crea la risorsa e risponde con un codice di stato 201 Created.
  • Un client invia una richiesta DELETE per rimuovere una risorsa. Il server elimina la risorsa e risponde con un codice di stato 204 No Content.

Messaggi di reindirizzamento (300-399)

I codici di stato nell'intervallo 300-399 significano che il client deve intraprendere ulteriori azioni per completare la richiesta. L'azione può essere eseguita dall'user agent senza interazione con l'utente. Alcuni codici di stato di reindirizzamento comuni includono:

Codice di Stato Descrizione
301 Moved Permanently Alla risorsa richiesta è stato assegnato un nuovo URI permanente e i riferimenti futuri dovrebbero usare uno degli URI restituiti.
302 Found La risorsa richiesta si trova sotto un URI diverso. Il client dovrebbe continuare a usare il Request-URI per richieste future.
304 Not Modified La risorsa non è stata modificata dalla versione specificata dagli header della richiesta, quindi il client può continuare a usare la versione in cache.

Scenari di esempio:

  • Un client richiede una risorsa che è stata spostata permanentemente a un nuovo URL. Il server risponde con un codice di stato 301 Moved Permanently e include il nuovo URL nell'header Location.
  • Un client richiede una risorsa che si trova sotto un URL diverso. Il server risponde con un codice di stato 302 Found e include l'URL temporaneo nell'header Location.
  • Un client invia una richiesta GET condizionale con l'header If-Modified-Since. Se la risorsa non è stata modificata dalla data specificata, il server risponde con un codice di stato 304 Not Modified.

Risposte di errore del client (400-499)

I codici di stato nell'intervallo 400-499 significano che il client sembra aver commesso un errore. Tranne quando si risponde a una richiesta HEAD, il server dovrebbe includere un'entità che spieghi l'errore. Alcuni codici di stato di errore del client comuni includono:

Codice di Stato Descrizione
400 Bad Request Il server non ha potuto comprendere la richiesta a causa di una sintassi errata.
401 Unauthorized La richiesta richiede l'autenticazione dell'utente.
404 Not Found Il server non ha trovato nulla che corrisponda al Request-URI.

Scenari di esempio:

  • Un client invia una richiesta con parametri non validi o mancanti. Il server risponde con un codice di stato 400 Bad Request e include un messaggio di errore nel body della risposta.
  • Un client cerca di accedere a una risorsa protetta senza fornire un'autenticazione valida. Il server risponde con un codice di stato 401 Unauthorized e richiede al client di autenticarsi.
  • Un client richiede una risorsa che non esiste sul server. Il server risponde con un codice di stato 404 Not Found.

Risposte di errore del server (500-599)

I codici di stato nell'intervallo 500-599 significano che il server sa di aver commesso un errore o non è in grado di eseguire la richiesta. Tranne quando si risponde a una richiesta HEAD, il server dovrebbe includere un'entità che spieghi l'errore e se si tratta di una condizione temporanea o permanente. Alcuni codici di stato di errore del server comuni includono:

Codice di Stato Descrizione
500 Internal Server Error Il server ha riscontrato una condizione imprevista che gli ha impedito di soddisfare la richiesta.
503 Service Unavailable Il server attualmente non è in grado di gestire la richiesta a causa di un sovraccarico temporaneo o della manutenzione del server.
504 Gateway Timeout Il server, mentre agisce come gateway o proxy, non ha ricevuto una risposta tempestiva dal server upstream a cui doveva accedere per completare la richiesta.

Scenari di esempio:

  • Un client richiede una risorsa, ma si verifica un errore imprevisto sul lato server. Il server risponde con un codice di stato 500 Internal Server Error e registra l'errore per l'analisi.
  • Un client cerca di accedere a un servizio che è temporaneamente fuori servizio per manutenzione. Il server risponde con un codice di stato 503 Service Unavailable e può includere un header Retry-After per indicare quando il servizio dovrebbe essere nuovamente disponibile.
  • Un client richiede una risorsa che richiede al server di comunicare con un server upstream. Se il server upstream impiega troppo tempo a rispondere, il server invia un codice di stato 504 Gateway Timeout al client.

Per maggiori informazioni sui codici di stato HTTP, puoi consultare le seguenti risorse:

Gestione delle Risposte HTTP nello Sviluppo Web

Quando crei applicazioni web, devi gestire correttamente le risposte HTTP sia lato client che lato server. Questo aiuta a creare una buona esperienza utente e facilita il debugging e la manutenzione dell'applicazione.

Lato Client

Dal lato client, come in un browser web o in un'app mobile, devi:

  1. Controllare i codici di stato: Dopo aver inviato una richiesta HTTP, il client dovrebbe controllare il codice di stato HTTP della risposta per vedere se la richiesta ha funzionato o meno. Per esempio:

    Codice di Stato Significato
    200 OK Successo
    404 Risorsa richiesta non trovata
  2. Elaborare i dati della risposta: In base al codice di stato e al campo header Content-Type, il client deve elaborare il body della risposta nel modo giusto. Per esempio:

    Content-Type Azione
    HTML Il browser lo visualizzerà
    JSON Analizzare in un oggetto per ulteriore utilizzo
  3. Gestire reindirizzamenti ed errori: Se il codice di stato indica un reindirizzamento (codici 3xx), il client dovrebbe seguire il nuovo URL nell'header Location. Per i codici di errore del client (4xx) e del server (5xx), il client dovrebbe mostrare messaggi di errore all'utente e magari ritentare la richiesta o chiedere all'utente di fare qualcosa.

Esempio di gestione di un messaggio di risposta HTTP in JavaScript usando la Fetch API:

fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error(`Errore HTTP! stato: ${response.status}`);
    }
    return response.json();
  })
  .then(data => {
    console.log(data);
    // Elabora i dati
  })
  .catch(error => {
    console.error('Errore:', error);
    // Gestisci l'errore
  });

Lato Server

Dal lato server, devi:

  1. Impostare i codici di stato e gli header giusti: Quando invii una risposta, il web server dovrebbe impostare il codice di stato HTTP corretto per mostrare il risultato dell'elaborazione della richiesta. Dovrebbe anche includere campi header di risposta, come Content-Type, per aiutare il client a comprendere correttamente la risposta.

  2. Fornire messaggi di errore chiari: Per le risposte di errore del client e del server, il server dovrebbe includere un messaggio di errore chiaro e conciso nel body della risposta. Questo aiuta gli sviluppatori a capire cosa è andato storto e come risolverlo.

  3. Implementare una buona gestione degli errori e del logging: Sul server, è importante rilevare e gestire bene gli errori. Questo significa registrare gli errori per analisi e debugging successivi, e non mostrare dati sensibili nei messaggi di errore inviati al client.

Esempio di invio di una risposta HTTP in Node.js usando Express:

app.get('/data', (req, res) => {
  try {
    const data = getDataFromDatabase();
    res.status(200).json(data);
  } catch (error) {
    console.error('Errore:', error);
    res.status(500).json({ error: 'Errore Interno del Server' });
  }
});