Le richieste HTTP sono alla base della comunicazione sul World Wide Web. Questo articolo fornisce un'analisi approfondita di cosa sono le richieste HTTP, come funzionano e il loro ruolo nel rendere possibili le esperienze web su cui facciamo affidamento ogni giorno.
Nozioni di base sulle richieste HTTP
Una richiesta HTTP è una richiesta effettuata da un client, come un browser web, a un server per ricevere una risorsa. Il client utilizza un URL (Uniform Resource Locator) che contiene le informazioni necessarie per accedere alle risorse del server.
Struttura di una richiesta HTTP
Una richiesta HTTP è composta da tre parti principali:
-
Riga di richiesta: include il metodo HTTP (verbo), il target della richiesta (che può essere un URI o un URL) e la versione HTTP. Il metodo HTTP identifica il tipo di azione da eseguire sulla risorsa.
-
Header: forniscono informazioni aggiuntive sulla richiesta, come lo user-agent, i cookie, la lunghezza del contenuto e il token di autorizzazione. Gli header possono anche specificare i tipi di dati che il client può accettare.
-
Corpo del messaggio: questa parte è facoltativa e viene utilizzata per inviare dati dal client al server o per trasferire informazioni dal server al client. Il corpo del messaggio viene spesso utilizzato quando si crea o si aggiorna una risorsa sul server.
Come funzionano le richieste HTTP
Le richieste HTTP sono il principale mezzo di comunicazione tra un client e un server sul World Wide Web. Quando inserisci un URL nel browser o fai clic su un link, il browser invia una richiesta HTTP al server che ospita il sito web. Il server controlla quindi la richiesta e invia una risposta HTTP, che include la risorsa richiesta (come una pagina HTML, un'immagine o un file JavaScript). Questo trasferimento di risorse avviene utilizzando il protocollo HTTP, che definisce la struttura e il formato delle richieste e delle risposte scambiate tra il browser e il server.
Metodi di richiesta HTTP
I metodi di richiesta HTTP, noti anche come verbi HTTP, indicano l'azione che deve essere eseguita su una risorsa. Ogni metodo ha uno scopo specifico e può essere utilizzato per ottenere, creare, aggiornare o eliminare dati su un server. Ecco i metodi di richiesta HTTP più comuni:
GET
Il metodo GET viene utilizzato per ottenere una risorsa da un server. È il metodo HTTP più utilizzato e viene impiegato ogni volta che fai clic su un link o digiti un URL nella barra degli indirizzi del browser. Le richieste GET dovrebbero essere utilizzate solo per ottenere dati e non dovrebbero modificare lo stato del server.
POST
Il metodo POST invia dati al server per creare o aggiornare una risorsa. I dati inviati al server vengono memorizzati nel corpo della richiesta HTTP. Questo viene spesso utilizzato quando si inviano moduli sui siti web.
PUT
Il metodo PUT è simile a POST in quanto può creare o aggiornare una risorsa. Tuttavia, chiamare una richiesta PUT più volte produrrà sempre lo stesso risultato, mentre più richieste POST identiche creeranno la stessa risorsa più volte. Le richieste PUT sono idempotenti, mentre le richieste POST non lo sono.
DELETE
Il metodo DELETE elimina una risorsa specifica sul server. Contiene tutte le informazioni necessarie per trovare la risorsa da rimuovere.
HEAD
Il metodo HEAD è identico a una richiesta GET, ma senza il corpo della risposta. Questo è utile per ottenere meta-informazioni su una risorsa senza trasferire l'intero contenuto. Le richieste HEAD vengono spesso utilizzate per testare la validità degli hyperlink o verificare se una risorsa è stata modificata.
PATCH
Il metodo PATCH applica modifiche parziali a una risorsa. È simile al metodo PUT ma viene utilizzato per apportare modifiche minori, come la modifica di un singolo campo di un record.
OPTIONS
Il metodo OPTIONS descrive le opzioni di comunicazione per la risorsa di destinazione. Questo consente a un client di determinare le opzioni e i requisiti associati a una risorsa senza ottenerla.
TRACE
Il metodo TRACE esegue un test di loop-back del messaggio lungo il percorso verso la risorsa di destinazione. Viene utilizzato per scopi di debug.
Ognuno di questi metodi serve uno scopo distinto nella comunicazione con i server e nella manipolazione delle risorse. Utilizzando il metodo giusto per ogni attività, gli sviluppatori possono garantire che le loro applicazioni interagiscano correttamente con i server.
Anatomia di una richiesta HTTP
Una richiesta HTTP ha tre parti principali: la riga di richiesta, gli header di richiesta e un corpo di richiesta opzionale.
Riga di richiesta
La riga di richiesta è la prima riga di una richiesta HTTP. Contiene tre informazioni importanti:
-
Il metodo HTTP (verbo) - indica il tipo di azione da eseguire sulla risorsa. I metodi HTTP comuni includono GET, POST, PUT, DELETE e altri come discusso in precedenza.
-
L'URL della richiesta - questo è l'URL della risorsa su cui deve essere eseguita l'azione. Può essere un percorso assoluto o un URL completo.
-
La versione HTTP - specifica la versione del protocollo HTTP utilizzata, tipicamente HTTP/1.1 o HTTP/2.
Ecco un esempio di riga di richiesta:
GET /products HTTP/1.1
Header di richiesta
Gli header HTTP consentono al client di passare informazioni aggiuntive insieme alla richiesta. Gli header sono coppie chiave-valore separate da due punti. Alcuni header comuni includono:
- Host - Il nome di dominio del server web.
- User-Agent - Informazioni sul client che effettua la richiesta, come il tipo e la versione del browser.
- Content-Type - Il tipo MIME del corpo della richiesta.
- Content-Length - La lunghezza del corpo della richiesta in byte.
- Authorization - Contiene le credenziali per autenticare un user agent con un server.
- Cookie - Contiene i cookie precedentemente inviati dal server.
Ecco un esempio di alcuni header di richiesta:
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
Content-Type: application/json
Corpo della richiesta
Il corpo della richiesta è facoltativo e contiene i dati inviati al server. Viene tipicamente utilizzato con le richieste POST, PUT, PATCH e talvolta DELETE. I dati possono essere in vari formati come:
- Dati di modulo - Coppie chiave-valore inviate da moduli HTML.
- JSON - JavaScript Object Notation, un formato comune per l'invio di dati strutturati.
- XML - eXtensible Markup Language, un altro formato per dati strutturati.
- Dati binari - Come immagini o altri file.
Ecco un esempio di payload JSON in un corpo di richiesta:
{
"name": "John Doe",
"age": 30,
"city": "New York"
}
Comprendere l'anatomia di una richiesta HTTP è importante per gli sviluppatori web. Consente loro di strutturare correttamente le richieste e includere tutte le informazioni necessarie affinché il server le elabori correttamente. La richiesta HTTP contiene informazioni chiave come il metodo di richiesta, l'URL, gli header e il corpo opzionale di cui il server web ha bisogno per comprendere e soddisfare la richiesta. Ogni richiesta HTTP apre una connessione TCP per inviare la richiesta e ricevere la risposta. HTTP è un protocollo del livello applicazione che definisce questo linguaggio di comando che i dispositivi su entrambi i lati della connessione devono seguire per comunicare.
Cos'è una richiesta HTTPS?
Estensione sicura di HTTP
HTTPS (Hypertext Transfer Protocol Secure) è un'estensione del protocollo HTTP standard che aggiunge un livello di sicurezza. Utilizza la crittografia bidirezionale per proteggere la comunicazione tra un client e un server. Questo significa che tutti i dati scambiati tra il client e il server sono crittografati, rendendo molto più difficile per terze parti intercettare e leggere i dati.
HTTPS utilizza certificati digitali SSL (Secure Sockets Layer) o TLS (Transport Layer Security) sul lato server per stabilire connessioni sicure. Quando un client (solitamente un browser web) si connette a un server HTTPS, il server presenta il suo certificato SSL/TLS per dimostrare la sua identità. Il client verifica quindi questo certificato prima di stabilire una connessione crittografata.
Come funzionano richieste e risposte HTTP
Comunicazione client-server
La comunicazione HTTP si basa su un modello client-server. Il client, solitamente un browser web, invia una richiesta HTTP al server. La richiesta include l'URL della risorsa, il metodo HTTP (come GET, POST, ecc.), gli header di richiesta e talvolta un corpo di richiesta.
Il server elabora quindi la richiesta e restituisce una risposta HTTP. La risposta contiene un codice di stato che indica se la richiesta è stata soddisfatta con successo (ad esempio, 200 OK) o se si è verificato un errore (ad esempio, 404 Not Found). La risposta include anche header che forniscono informazioni aggiuntive sulla risposta e solitamente un corpo del messaggio contenente idati richiesti.
Ad esempio, quando inserisci un URL nel browser, il browser invia una richiesta GET al server. Il server restituisce quindi una risposta contenente il contenuto HTML della pagina web. Il browser analizza quindi questo HTML e invia richieste aggiuntive per tutte le altre risorse necessarie per visualizzare la pagina, come immagini, fogli di stile CSS e file JavaScript.
Accesso a risorse ospitate su server diversi
Una singola pagina web spesso include risorse da più server. Ad esempio, una pagina potrebbe caricare il suo contenuto principale da un server, le sue immagini da un altro e script o fogli di stile da un altro server ancora. Questo perché Internet è costituito da server interconnessi, ognuno dei quali ospita le proprie risorse.
Quando visiti una pagina web, il tuo browser deve effettuare richieste HTTP separate a ciascuno di questi server per ottenere tutte le risorse necessarie per visualizzare la pagina. Inizia richiedendo il documento HTML, che include riferimenti ad altre risorse come immagini, file CSS e JavaScript. Il browser effettua quindi ulteriori richieste HTTP ai server che ospitano queste risorse.
Una volta che il browser ha ricevuto tutte le risorse necessarie, visualizza la pagina web analizzando l'HTML, applicando gli stili CSS ed eseguendo qualsiasi codice JavaScript. Questo codice JavaScript può ulteriormente interagire con la pagina, modificando l'HTML e il CSS e persino effettuando ulteriori richieste HTTP ai server (questo è il modo in cui funziona AJAX).
Quindi, anche se può sembrare che tu stia interagendo con una singola entità quando utilizzi un sito web, in realtà c'è una rete complessa di interazioni client-server che avviene tramite HTTP.
Ruolo dei browser web nelle richieste HTTP
Invio di richieste e visualizzazione delle risposte
I browser web sono i client HTTP più comuni. Quando inserisci un URL nella barra degli indirizzi di un browser o fai clic su un link su una pagina web, il browser invia una richiesta HTTP al server che ospita il sito web. Questa richiesta include solitamente l'URL della pagina, il metodo HTTP (solitamente GET per la normale navigazione web) e header che forniscono informazioni sul browser.
Una volta che il server risponde con le risorse richieste, il compito del browser è visualizzare il contenuto per l'utente. Per una tipica pagina web, questo significa analizzare l'HTML per costruire il Document Object Model (DOM), applicare gli stili CSS per disporre e decorare gli elementi della pagina ed eseguire qualsiasi codice JavaScript per aggiungere interattività o aggiornare dinamicamente il contenuto della pagina.
I browser inviano anche più richieste HTTP per tutte le risorse incorporate nel documento HTML, come immagini, file CSS, file JavaScript o altri contenuti collegati. Ognuna di queste risorse richiede un ciclo separato di richiesta e risposta HTTP.
Funzionalità del browser e richieste HTTP
I browser web moderni hanno molte funzionalità che ottimizzano la comunicazione HTTP:
-
Caching: i browser possono memorizzare le risorse recuperate di recente in una cache locale. Se la stessa risorsa è necessaria di nuovo, il browser può servirla dalla cache invece di effettuare un'altra richiesta HTTP. Questo riduce il traffico di rete e rende le pagine più veloci da caricare.
-
Richieste condizionali: i browser possono inviare richieste HTTP condizionali, che includono header come "If-Modified-Since" o "If-None-Match". Questi consentono al server di inviare una risposta completa solo se la risorsa è cambiata dall'ultima richiesta, risparmiando larghezza di banda se la risorsa non è cambiata.
-
Metodi di richiesta diversi: mentre la maggior parte delle richieste del browser utilizza il metodo GET, i browser possono inviare altri tipi di richieste in base alle azioni dell'utente. Ad esempio, l'invio di un modulo può inviare una richiesta POST e alcune interazioni AJAX possono utilizzare PUT, DELETE o altri metodi.
-
Richieste parallele: i browser moderni possono inviare più richieste HTTP in parallelo, consentendo un caricamento più rapido delle pagine con molte risorse. Tuttavia, ci sono limiti al numero di connessioni simultanee che un browser effettuerà a un singolo server per evitare di sovraccaricare il server.
-
Funzionalità di sicurezza: i browser hanno funzionalità di sicurezza integrate relative a HTTP, come il blocco di contenuti misti (risorse HTTP su pagine HTTPS), l'applicazione di policy CORS (Cross-Origin Resource Sharing) e la gestione di cookie e altri meccanismi di autenticazione.
Codici di stato HTTP
I codici di stato HTTP sono restituiti da un server in risposta alla richiesta di un client. Questi codici indicano se una richiesta HTTP è stata completata e, in caso contrario, forniscono informazioni sulla causa del fallimento. Conoscere i codici di stato HTTP aiuta gli sviluppatori web a fare debug e gestire diverse situazioni nelle applicazioni web.
Tipi di codici di stato
I codici di stato HTTP sono suddivisi in cinque classi, con ogni classe che rappresenta un tipo specifico di risposta:
-
1xx (Informativo): questi codici di stato indicano che la richiesta è stata ricevuta e il processo sta continuando. Il client può aspettarsi una risposta finale una volta completata l'elaborazione della richiesta. Un esempio è
100 Continue, che significa che il server ha ricevuto gli header della richiesta e il client dovrebbe inviare il corpo della richiesta. -
2xx (Successo): questi codici di stato significano che la richiesta è stata ricevuta, compresa e accettata con successo dal server. Il codice più comune in questa classe è
200 OK, che indica che la richiesta è riuscita. -
3xx (Reindirizzamento): questi codici di stato indicano che è necessaria un'ulteriore azione da parte del client per completare la richiesta. Questo solitamente comporta il reindirizzamento del client a un altro URL. Ad esempio,
301 Moved Permanentlysignifica che la risorsa richiesta è stata spostata permanentemente in un nuovo URL e il client dovrebbe utilizzare questo nuovo URL per richieste future. -
4xx (Errore del client): questi codici di stato vengono utilizzati quando la richiesta contiene una sintassi errata o non può essere soddisfatta a causa di un problema lato client. Il ben noto codice
404 Not Foundappartiene a questa classe, indicando che il server non ha potuto trovare la risorsa richiesta. -
5xx (Errore del server): questi codici di stato significano che il server non è riuscito a soddisfare una richiesta valida. Questo solitamente indica un problema con il server stesso. Il codice più comune in questa classe è
500 Internal Server Error, che è una risposta generica quando il server incontra una condizione imprevista che impedisce di soddisfare la richiesta.
Codici di stato comuni
Sebbene esistano molti codici di stato HTTP, ecco alcuni dei più comuni:
-
200 OK: la richiesta è riuscita. Questa è la risposta standard per richieste HTTP riuscite. -
201 Created: la richiesta è stata soddisfatta e una nuova risorsa è stata creata di conseguenza. Questa è tipicamente la risposta inviata dopo una richiesta POST. -
301 Moved Permanently: la risorsa richiesta è stata spostata permanentemente in un nuovo URL. I riferimenti futuri a questa risorsa dovrebbero utilizzare l'URL restituito. -
400 Bad Request: il server non può elaborare la richiesta a causa di un errore del client, come una sintassi della richiesta malformata. -
401 Unauthorized: la richiesta richiede l'autenticazione dell'utente. Il client può ripetere la richiesta con un header Authorization appropriato. -
403 Forbidden: il server ha compreso la richiesta ma si rifiuta di autorizzarla. Questo stato è simile a 401 ma viene utilizzato quando l'autenticazione non aiuterà. -
404 Not Found: il server non riesce a trovare la risorsa richiesta. Questo potrebbe essere dovuto a un URL errato o a una risorsa che è stata eliminata. -
500 Internal Server Error: il server ha incontrato una condizione imprevista che ha impedito di soddisfare la richiesta. Questa è una risposta generica. -
502 Bad Gateway: il server, mentre agisce come gateway o proxy, ha ricevuto una risposta non valida da un server upstream a cui doveva accedere per completare la richiesta. -
503 Service Unavailable: il server al momento non è in grado di gestire la richiesta a causa di un sovraccarico temporaneo o di manutenzione programmata. Questa condizione è solitamente temporanea.
Comprendere questi codici di stato può essere di grande aiuto per risolvere problemi e gestire diverse situazioni nelle applicazioni web. Quando si progettano API, è importante utilizzare i codici di stato giusti per comunicare chiaramente il risultato della richiesta di un client. Questo rende la tua API più comprensibile e più facile con cui lavorare per altri sviluppatori.
Quando un client invia una richiesta HTTP a un server, apre una connessione TCP. Il server restituisce quindi una risposta che contiene un codice di stato HTTP, indicando l'azione desiderata da eseguire dal browser. I dati della risposta sono memorizzati nel corpo della richiesta HTTP e l'header Content-Length specifica la dimensione di questi dati. Diversi metodi HTTP come GET e PUT vengono utilizzati per indicare l'azione desiderata da eseguire dal server. Mentre le richieste GET vengono utilizzate per recuperare dati, le richieste PUT sono idempotenti e possono essere utilizzate per aggiornare o creare risorse sul server.
Come monitorare le richieste HTTP
Importanza del monitoraggio
Il monitoraggio delle richieste HTTP è importante per garantire che il tuo servizio web funzioni bene e possa soddisfare le richieste dei client. Tenendo traccia delle richieste e delle risposte HTTP, puoi trovare e risolvere rapidamente eventuali problemi che possono verificarsi. Il monitoraggio ti aiuta a mantenere la salute e le prestazioni della tua applicazione web, fornendo una migliore esperienza utente per i tuoi client.
Utilizzo di Uptimia per il monitoraggio
Uptimia è uno strumento utile per monitorare le richieste HTTP. Ti consente di configurare monitor di singole richieste HTTP che registrano dati di risposta dettagliati. Con Uptimia, puoi:
- Selezionare il metodo di richiesta HTTP (GET, POST, PUT, DELETE, ecc.) per il tuo monitor
- Specificare l'URL che desideri monitorare
- Scegliere l'intervallo di test con cui verrà eseguito il monitor
- Selezionare le posizioni di test da cui verranno inviate le richieste HTTP
Puoi anche configurare impostazioni di richiesta avanzate come header, parametri di query, cookie e corpo della richiesta. Questa flessibilità ti consente di simulare scenari reali e testare il tuo servizio web in modo approfondito. Puoi leggere di più sul monitoraggio dei siti web qui.
Configurazione degli avvisi
Per trovare e risolvere i problemi rapidamente, è importante configurare avvisi nel tuo sistema di monitoraggio. Con Uptimia, puoi creare avvisi che vengono attivati quando vengono soddisfatte determinate condizioni, come:
- Codici di stato della risposta HTTP nell'intervallo 4xx (errore del client) o 5xx (errore delserver)
- Tempo di risposta che supera una soglia specificata
- Contenuto imprevisto nel corpo della risposta
- Scadenza o errori di validazione del certificato SSL/TLS
Configurando gli avvisi, puoi assicurarti di essere rapidamente avvisato quando si verificano problemi, permettendoti di risolverli velocemente. Questo aiuta a ridurre al minimo i tempi di inattività e a mantenere un'alta qualità del servizio per i tuoi utenti.
Il monitoraggio delle richieste HTTP non è importante solo per trovare e risolvere problemi, ma anche per conoscere le prestazioni e i modelli di utilizzo della tua applicazione web. Analizzando i dati raccolti dal tuo strumento di monitoraggio, puoi prendere decisioni informate per ottimizzare la tua applicazione, come:
- Trovare e rimuovere colli di bottiglia nelle prestazioni
- Scalare l'infrastruttura per gestire l'aumento del traffico
- Migliorare le strategie di caching per ridurre i tempi di risposta
- Ottimizzare le query del database o le chiamate API
Punti chiave
- Le richieste HTTP sono il principale mezzo con cui i client (come i browser web) comunicano con i server sul World Wide Web.
- Una richiesta HTTP consiste in una riga di richiesta (che include il metodo HTTP, l'URL e la versione HTTP), header e un corpo del messaggio opzionale.
- HTTPS è un'estensione di HTTP che aggiunge un livello di sicurezza crittografando i dati scambiati tra client e server.
- I browser web svolgono un ruolo chiave nell'ecosistema HTTP inviando richieste, visualizzando risposte e fornendo funzionalità per ottimizzare e proteggere queste interazioni.
- I codici di stato HTTP sono restituiti dai server per indicare se una richiesta è stata soddisfatta con successo o se si è verificato un errore, con codici diversi che rappresentano diversi tipi di risposte.





