Passa al contenuto principale

HTTP

HyperText Transfer Protocol

È un protocollo internazionale a livello applicativo usato in un’architettura client-server per la trasmissione delle informazioni sul WWW (World Wide Web).

Il client (ad esempio il browser usato per navigare in internet) esegue una HTTP requests (richiesta) e il server (è la macchina su cui risiede il sito web) restituisce la HTTP responses (risposta) mandata da un altro host.

Le specifiche del protocollo sono gestite dal W3C (World Wide Web Consortium).

Qui di seguito riportiamo i codici di stato HTTP:

  • 1xx Informational:
    • 100 Continue (RFC7231 Sezione 6.1.1): indica che il server desidera ricevere il corpo del payload (carico utile del dato) della richiesta (RFC7231 Sezione 5.1.1) e il client dovrebbe continuare a inviare la richiesta e scartare la risposta 100;
    • 101 Switching Protocols (RFC7231 Sezione 6.2.2): il server deve generare un campo di intestazione Upgrade (RFC7230 Sezione 6.7) nella risposta che indica a quale protocollo si passerà immediatamente dopo la riga vuota che termina la risposta 101;
    • 102 Processing (RFC2518 Sezione 10.1): è una risposta provvisoria utilizzata per informare il client che il server ha accettato la richiesta completa ma non l’ha ancora completata;
  • 2×× Success:
    • 200 OK (RFC7231 Sezione 6.3.1): la richiesta è andata a buon fine e per impostazione predefinita, è possibile memorizzare nella cache il risultato 200 (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 201 Created (RFC7231 Sezione 6.3.2): la richiesta è stata soddisfatta e ha comportato la creazione di una o più nuove risorse;
    • 202 Accepted (RFC7231 Sezione 6.3.3): la richiesta è stata accettata per l’elaborazione, ma l’elaborazione non è stata completata. Alla richiesta potrebbe o meno essere data seguito, poiché potrebbe essere respinta quando l’elaborazione avviene effettivamente;
    • 203 Non-authoritative Information (RFC7231 Sezione 6.3.4): la richiesta ha avuto successo ma il payload allegato è stato modificato da quello della risposta 200 OK del server di origine da un proxy di trasformazione (RFC7230 Sezione 5.7.2). È simile al codice "Warning di 214 Transformation Applied" (RFC7234 Sezione 5.5) ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 204 No Content (RFC7231 Sezione 6.3.5): il server ha soddisfatto con successo la richiesta e non sono presenti contenuti aggiuntivi da inviare nel corpo del payload della risposta ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 205 Reset Content (RFC7231 Sezione 6.3.6): il server ha soddisfatto la richiesta e desidera che l’agente utente ripristini la "visualizzazione del documento", che ha causato l’invio della richiesta, allo stato originale ricevuto dal server di origine;
    • 206 Partial Content (RFC7233 Sezione 4.1): il server sta soddisfacendo con successo una richiesta di intervallo per la risorsa di destinazione trasferendo una o più parti (Tipo di supporto Internet multipart/byteranges RFC7233 Appendice A) della rappresentazione selezionata che corrispondono agli intervalli soddisfacibili trovati nel campo (RFC7233 Sezione 3.1) dell’intestazione Range della richiesta ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 207 Multi-Status (RFC4918 Sezione 13): trasmette informazioni su più risorse in situazioni in cui potrebbero essere appropriati più codici di stato;
    • 208 Already Reported (RFC5842 Sezione 7.1): viene utilizzato all’interno di un DAV (Distributed Authoring and Versioning - RFC5842 Sezione 8.2): elemento di risposta propstat per evitare di enumerare ripetutamente i membri interni di più associazioni alla stessa raccolta (Mappature URI create da una nuova associazione RFC5842 Sezione 2.2);
    • 226 IM Used (RFC3229 Sezione 10.4.1): il server ha soddisfatto una richiesta GET per la risorsa e la risposta è una rappresentazione del risultato di una o più manipolazioni dell’istanza applicate all’istanza corrente;
  • 3×× Redirection:
    • 300 Multiple Choices (RFC7231 Sezione 6.4.1): la risorsa di destinazione ha più di una rappresentazione (Negoziazione del contenuto RFC7231 Sezione 3.4), ciascuna con il proprio identificatore più specifico, e vengono fornite informazioni sulle alternative in modo che l’utente (o l’agente utente) possa selezionare una rappresentazione preferita reindirizzando (Collegamento Web RFC5988) la sua richiesta a uno o più di tali identificatori ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 301 Moved Permanently (RFC7231 Sezione 6.4.2): alla risorsa di destinazione è stato assegnato un nuovo URI permanente e qualsiasi riferimento futuro a questa risorsa dovrebbe utilizzare uno degli URI inclusi ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 302 Found (RFC7231 Sezione 6.4.3): la risorsa di destinazione risiede temporaneamente in un URI diverso. Poiché il reindirizzamento potrebbe essere modificato occasionalmente, il client dovrebbe continuare a utilizzare l’URI della richiesta effettiva per le richieste future;
    • 303 See Other (RFC7321 Sezione 6.4.4): il server reindirizza l’agente utente a una risorsa diversa, come indicato da un URI nel campo dell’intestazione Posizione, che ha lo scopo di fornire una risposta indiretta alla richiesta originale;
    • 304 Not Modified (RFC7232 Sezione 4.1): è stata ricevuta una richiesta GET o HEAD condizionale e il risultato sarebbe stata una risposta di 200 OK se non fosse stato per il fatto che la condizione era valutata come falsa;
    • 305 Use Proxy (RFC7231 Sezione 6.4.5): definito in una versione precedente di queste specifiche ed è ora deprecato a causa di problemi di sicurezza relativi alla configurazione in banda di un proxy;
    • 307 Temporary Redirect (RFC7231 Sezione 6.4.7): la risorsa di destinazione risiede temporaneamente sotto un URI diverso e l’agente utente NON DEVE modificare il metodo di richiesta se esegue un reindirizzamento automatico a quel URI;
    • 308 Permanent Redirect (RFC738 Sezione 3): alla risorsa di destinazione (Posizione RFC7231 Sezione 7.1.2) è stato assegnato un nuovo URI permanente e qualsiasi riferimento futuro a questa risorsa dovrebbe utilizzare uno degli URI (URI della richiesta effettiva RFC7230 Sezione 5.5) inclusi ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
  • 4×× Client Error:
    • 400 Bad Request (RFC7231 Section 6.5.1): il server non può o non elaborerà la richiesta a causa di qualcosa che viene percepito come un errore del client (ad esempio, sintassi della richiesta non valida, frame del messaggio di richiesta non valido o instradamento della richiesta ingannevole);
    • 401 Unauthorized (RFC7235 Sezione 3.1): la richiesta non è stata applicata perché non dispone di credenziali di autenticazione (Autenticazione WWW RFC7235 Sezione 4.1) valide per la risorsa di destinazione (Autorizzazione RFC7235 Sezione 4.2);
    • 402 Payment Required (RFC7231 Sezione 6.5.2): riservato per uso futuro;
    • 403 Forbidden (RFC7231 Sezione 6.5.3): il server ha compreso la richiesta ma rifiuta di autorizzarla;
    • 404 Not Found (RFC7231 6.5.4): il server di origine non ha trovato una rappresentazione corrente per la risorsa di destinazione o non è disposto a rivelarne l’esistenza ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 405 Method Not Allowed (RFC7231 Sezione 6.5.5): il metodo ricevuto nella riga di richiesta è noto al server di origine ma non supportato dalla risorsa di destinazione ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 406 Not Acceptable (RFC7231 Sezione 6.5.6): la risorsa di destinazione non ha una rappresentazione corrente che sarebbe accettabile per l’agente utente, secondo i campi di intestazione di negoziazione proattiva ricevuti nella richiesta (Negoziazione del contenuto RFC7231 Sezione 5.3), e il server non è disposto a fornire una rappresentazione predefinita;
    • 407 Proxy Authentication Required (RFC7235 Sezione 3.2): è simile a 401 Unauthorized, ma indica che il client deve autenticarsi (Autenticazione proxy RFC7235 Sezione 4.3) per poter utilizzare un proxy (Autorizzazione proxy RFC7235 Sezione 4.4);
    • 408 Request Timeout (RFC7231 Sezione 6.5.7): il server non ha ricevuto un messaggio di richiesta completo entro il tempo previsto per l’attesa (Connessione RFC7230 Sezione 6.1);
    • 409 Conflict (RFC7231 Sezione 6.5.8): non è stato possibile completare la richiesta a causa di un conflitto con lo stato corrente della risorsa di destinazione. Questo codice viene utilizzato in situazioni in cui l’utente potrebbe essere in grado di risolvere il conflitto e inviare nuovamente la richiesta;
    • 410 Gone (RFC7231 Sezione 6.5.9): a risorsa di destinazione non è più disponibile nel server di origine e questa condizione probabilmente sarà permanente ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 411 Length Required (RFC7231 Sezione 6.5.10): il server rifiuta di accettare la richiesta senza una lunghezza del contenuto definita (Lunghezza del contenuto RFC7230 Sezione 3.3.2);
    • 412 Precondition Failed (RFC7232 Sezione 4.2): una o più condizioni fornite nei campi dell’intestazione della richiesta sono state valutate come false quando testate sul server;
    • 413 Payload Too Large (RFC7231 Sezione 6.5.11): il server si rifiuta di elaborare una richiesta perché il carico utile della richiesta è maggiore di quanto il server è disposto o in grado di elaborare;
    • 414 Request-URI Too Long (RFC7231 Sezione 6.5.12): il server si rifiuta di soddisfare la richiesta (Negoziazione del contenuto RFC7230 Sezione 5.3) perché la destinazione della richiesta 1 è più lunga di quanto il server sia disposto a interpretare ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 415 Unsupported Media Type (RFC7231 Sezione 6.5.13): il server di origine si rifiuta di soddisfare la richiesta perché il payload è in un formato non supportato da questo metodo sulla risorsa di destinazione;
    • 416 Requested Range Not Satisfiable (RFC7233 Sezione 4.4): nessuno degli intervalli nel campo (Gamma RFC7233 Sezione 3.1) dell’intestazione Intervallo della richiesta si sovrappone all’estensione corrente della risorsa selezionata o l’insieme di intervalli richiesti è stato rifiutato a causa di intervalli non validi o di una richiesta eccessiva di intervalli piccoli o sovrapposti (Intervallo di contenuti RFC7233 Sezione 4.2);
    • 417 Expectation Failed (RFC7231 Sezione 6.5.14): on è stato possibile soddisfare le aspettative fornite nel campo dell’intestazione Expect (Aspettatevi RFC7231 Sezione 5.1.1) della richiesta da almeno uno dei server in entrata;
    • 418 I’m a teapot (RFC2324 Sezione 2.3.2): qualsiasi tentativo di preparare il caffè con una teiera dovrebbe risultare nel codice di errore "418 I’m a teapot";
    • 421 Misdirected Request (RFC7540 Sezione 9.1.2): la richiesta era diretta a un server che non è in grado di produrre una risposta (Riutilizzo della connessione RFC7540 Sezione 9.1.1) ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 422 Unprocessable Entity (RFC4918 Sezione 11.2): il server comprende il tipo di contenuto dell’entità richiesta (il codice di stato 415 Unsupported Media Type non è appropriato) e la sintassi dell’entità richiesta è corretta (il codice di stato 400 Bad Request non è appropriato) ma non è stato in grado di elaborare il contenuto Istruzioni;
    • 423 Locked (RFC4918 Sezione 11.3): la risorsa di origine o di destinazione di un metodo è bloccata;
    • 424 Failed Dependency (RFC4918 Sezione 11.4): non è stato possibile eseguire il metodo sulla risorsa perché l’azione richiesta dipendeva da un’altra azione e tale azione non è riuscita;
    • 426 Upgrade Required (RFC7231 Sezione 6.5.15): il server rifiuta di eseguire la richiesta utilizzando il protocollo corrente ma potrebbe essere disposto a farlo dopo che il client si è aggiornato a un protocollo diverso (Aggiornamento RFC7230 Sezione 6.7);
    • 428 Precondition Required (RFC6585 Sezione 3): il server di origine richiede che la richiesta sia condizionale;
    • 429 Too Many Requests (RFC6585 Sezione 4): l’utente ha inviato troppe richieste in un determinato periodo di tempo (limitazione della velocità);
    • 431 Request Header Fields Too Large (RFC6585 Sezione 5): il server non è disposto a elaborare la richiesta perché i campi dell’intestazione sono troppo grandi;
    • 444 Connection Closed Without Response (documentazione nginx): un codice di stato non standard utilizzato per istruire nginx a chiudere la connessione senza inviare una risposta al client, più comunemente utilizzato per negare richieste dannose o non corrette;
    • 451 Unavailable For Legal Reasons (RFC 7725): il server nega l’accesso alla risorsa a seguito di una richiesta legale;
    • 499 Client Closed Request (documentazione nginx): un codice di stato non standard introdotto da nginx per il caso in cui un client chiude la connessione mentre nginx sta elaborando la richiesta;
  • 5×× Server Error;
    • 500 Internal Server Error (RFC7231 Sezione 6.6.1): il server ha riscontrato una condizione imprevista che gli ha impedito di soddisfare la richiesta;
    • 501 Not Implemented (RFC7231 Sezione 6.6.2): il server non supporta la funzionalità richiesta per soddisfare la richiesta ed è memorizzabile nella cache per impostazione predefinita (Calcolo della freschezza euristica RFC7234 Sezione 4.2.2);
    • 502 Bad Gateway (RFC7231 Sezione 6.6.3): il server, mentre fungeva da gateway o proxy, ha ricevuto una risposta non valida da un server in entrata a cui ha avuto accesso durante il tentativo di soddisfare la richiesta;
    • 503 Service Unavailable (RFC7231 Sezione 6.6.4): il server al momento non è in grado di gestire la richiesta a causa di un sovraccarico temporaneo o di una manutenzione programmata, che verrà probabilmente risolta con un certo ritardo (Riprova dopo RFC7231 Sezione 7.1.3);
    • 504 Gateway Timeout (RFC7231 Sezione 6.6.5): il server, pur fungendo da gateway o proxy, non ha ricevuto una risposta tempestiva da un server upstream a cui doveva accedere per completare la richiesta;
    • 505 HTTP Version Not Supported (RFC7231 Sezione 6.6.6): il server non supporta, o rifiuta di supportare, la versione principale di HTTP utilizzata nel messaggio di richiesta;
    • 506 Variant Also Negotiates (RFC2295 Sezione 8.1): il server presenta un errore di configurazione interno: la risorsa variante scelta è configurata per impegnarsi nella negoziazione trasparente del contenuto e pertanto non è un punto finale corretto nel processo di negoziazione;
    • 507 Insufficient Storage (RFC4918 Sezione 11.5): non è stato possibile eseguire il metodo sulla risorsa perché il server non è in grado di archiviare la rappresentazione necessaria per completare con successo la richiesta;
    • 508 Loop Detected (RFC5842 Sezione 7.2): il server ha terminato un’operazione perché ha riscontrato un loop infinito durante l’elaborazione di una richiesta con "Profondità: infinito" (operazione non riuscita);
    • 510 Not Extended (RFC2774 Sezione 7). la politica per l’accesso alla risorsa non è stata soddisfatta nella richiesta. Il server dovrebbe restituire tutte le informazioni necessarie affinché il client emetta una richiesta estesa;
    • 511 Network Authentication Required (RFC6585 Sezione 6): il client deve autenticarsi per ottenere l’accesso alla rete;
    • 599 Network Connect Timeout Error (non è uno standard RFC): viene utilizzato da alcuni proxy HTTP per segnalare un timeout di connessione di rete dietro il proxy a un client davanti al proxy (sovraccarico del server, guasti della rete e/o un errore lato server).

Vedi: RFC (Request for Comments)