Quando si visita un sito web, il browser effettua in background decine o centinaia di richieste indirizzate al server. Il server risponde a queste richieste fornendo tutti i dati e i file che devono essere caricati dal sito. Tuttavia, nella realtà il processo è più complesso di così.
Capire come funzionano le richieste HTTP è essenziale se si vogliono migliorare le prestazioni dei sito web. Alcune di queste misure di ottimizzazione prevedono la minificazione e la compressione delle richieste. In sostanza, bisogna ottimizzare il server in modo che risponda meglio alle richieste HTTP.
Guardate la nostra guida video alle richieste HTTP
In questo articolo vedremo da vicino come funzionano le richieste HTTP. Mostreremo anche la struttura delle richieste HTTP e come risolverle se necessario. Mettiamoci al lavoro!
Cos’è HTTP?
HTTP è un protocollo. L’acronimo sta infatti per HyperText Transfer Protocol. Questo protocollo regola la struttura e il linguaggio delle richieste e delle risposte che avvengono tra client e server. I client sono di solito i browser web, ma possono presentarsi in molte forme, come ad esempio i robot dei motori di ricerca.
Quando si visita un sito web tramite un browser, l’intera connessione avviene tramite HTTP. Il protocollo consente di ricevere dati, tra cui testo, immagini, video, fogli di stile, script e altro ancora.
HTTP è stato una delle colonne portanti del web sin dai primi anni ’90. Negli ultimi decenni si è evoluto per diventare più efficiente. Nella seconda metà del 2010 è stato sviluppato HTTP/2, che consente ai client di caricare le risorse in modo simultaneo anziché asincrono. Questo comporta un enorme aumento delle prestazioni.
Nel 2022 il 46% del web utilizzerà HTTP/2. Ora si sta già discutendo sull’adozione di HTTP/3, noto anche come HTTP-over-QUIC. HTTP/3 funziona con il protocollo UDP, il che gli conferisce un vantaggio rispetto alle tradizionali connessioni TCP (che sono quelle utilizzate da HTTP e HTTP/2).
Cos’è una Richiesta HTTP (e Come Funziona)?
Una richiesta HTTP è la connessione di un browser al server e la richiesta di una risorsa specifica o l’invio di dati. Esistono diversi metodi di richiesta HTTP che modificano completamente il tipo di risposta che si riceve dal server. I più comuni sono:
- GET. È il metodo di richiesta HTTP di gran lunga più utilizzato. Una richiesta GET chiede al server una specifica informazione o risorsa. Quando ci si collega a un sito web, il browser di solito invia diverse richieste GET per ricevere i dati necessari al caricamento della pagina.
- HEAD. Con una richiesta HEAD, si ricevono solo le informazioni di intestazione della pagina che si vuole caricare. Si può utilizzare questo tipo di richiesta HTTP per conoscere le dimensioni di un documento prima di scaricarlo via GET.
- POST. Il browser utilizza il metodo di richiesta HTTP POST quando deve inviare dei dati al server. Ad esempio, se si compila un modulo di contatto su un sito web e lo si invia, si sta utilizzando una richiesta POST per far sì che il server riceva le informazioni.
- PUT. Le richieste PUT hanno una funzionalità simile al metodo POST. Tuttavia, invece di inviare i dati, si utilizzano le richieste PUT per aggiornare le informazioni già presenti sul server finale.
Esistono altri tipi di richieste HTTP, tra cui i metodi DELETE, PATCH e OPTIONS. Tuttavia, sono relativamente poco diffusi nell’uso quotidiano.
L’invio di una richiesta HTTP comporta l’invio di un messaggio al server ricevente in un formato specifico. Il server restituisce una risposta e il client agisce di conseguenza. Ad esempio, si possono caricare risorse o reindirizzare l’utente a un’altra pagina.
Quando si riceve un errore HTTP, di solito è perché il server non può soddisfare la richiesta. Il codice di errore che si ottiene dovrebbe spiegarne il motivo. Alcune delle cause più frequenti degli errori HTTP sono l’impossibilità di connettersi al server e di trovare le risorse richieste.
Prova il nostro strumento HTTP header Checker per esaminare lo stato di qualsiasi pagina.
Introduzione alle Strutture delle Richieste e delle Risposte HTTP
Le richieste e le risposte HTTP hanno strutture simili. Per essere in grado di analizzare le richieste e le risposte HTTP e interpretare i possibili errori del sito, è importante comprendere queste strutture.
In generale, le richieste HTTP sono divise in tre sezioni. Diamo un’occhiata a ciascuna sezione.
Riga di Richiesta HTTP
Ogni richiesta HTTP inizia con una riga che indica il metodo utilizzato e la versione del protocollo HTTP. Ad esempio, l’inizio di una richiesta HTTP GET potrebbe essere questo:
GET /XXX HTTP/1.1
In questo caso, il paremetro “XXX” che segue il metodo GET indica il file che si vuole ricevere.
L’inizio di una risposta HTTP ribadisce la versione del protocollo che entrambe le parti stanno utilizzando. Include anche un codice HTTP che corrisponde allo stato della risposta.
Se si visita un sito web e il caricamento avviene con successo, si vedrà un messaggio HTTP di successo 2XX:
HTTP/1.1 200 OK
In questa parte della risposta HTTP vengono visualizzati i codici di errore nel caso in cui la risorsa non venga caricata per qualche motivo. Se il server non riesce a trovare la pagina, si vedrà un’intestazione di risposta come questa:
HTTP/1.1 400 OK
Se si conoscono i metodi di richiesta e i codici di stato HTTP, la riga iniziale dice esattamente che tipo di transazione sta avvenendo tra il client e il server. In generale, questa è la parte della richiesta più semplice da capire.
Header della Richiesta
Gli header della richiesta vengono subito dopo le righe della richiesta e forniscono ulteriori informazioni sulla transazione. Gli header specificano informazioni sull’host, sul software del server web utilizzato dal client finale, sullo user agent del client e altro ancora.
Ecco come si presenta l’header di una richiesta HTTP:
Host: website.com
User-Agent: Chrome/5.0 (Windows 10)
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive</code.
Questi sono solo alcuni esempi dei parametri delle intestazioni HTTP che si possono utilizzare. Ecco il significato di ogni riga dell’intestazione:
- Host: È l’IP o l’URL del server a cui si sta facendo la richiesta.
- User-agent: Questo parametro contiene informazioni sul client e sul suo sistema operativo (OS). In genere, indica il browser che si sta utilizzando e la sua versione.
- Accept-language: Questa riga indica al server la lingua preferita dal client, nel caso in cui esistano più versioni del file richiesto.
- Accept-encoding: Questa riga indica il tipo di codifica o compressione che il client può elaborare.
- Connessione: Questo parametro indica al server se mantenere viva la connessione o se impostare un timeout. Se la connessione si interrompe prima di completare la richiesta, si riceverà un errore.
Mettiamo insieme la riga della richiesta e le intestazioni per avere un’idea della struttura generale che si dovrà utilizzare:
GET /XXX HTTP/1.1
Host: website.com
User-Agent: Chrome/5.0 (Windows 10)
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive</code.
Nell’esempio precedente, si sta inviando una richiesta GET all’host website.com per ottenere una risorsa specifica. Ora vediamo come potrebbe essere l’intestazione della risposta:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2022 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2022 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed</code.
L’intestazione della risposta inizia dalla seconda riga e include la data della connessione e le informazioni sul server web e sul sistema operativo utilizzati dall’host. Se si sta richiedendo un file, l’intestazione mostrerà anche informazioni sulla data dell’ultima modifica, sulla lunghezza del file e sul tipo di contenuto. La riga finale indica che la connessione è chiusa perché la richiesta è stata completata.
Le informazioni e i parametri contenuti nelle intestazioni possono variare a seconda del tipo di richiesta. Tuttavia, la struttura generale rimane la stessa.
Corpo del Messaggio HTTP
Il corpo del messaggio è la parte più semplice di una richiesta HTTP. Contiene i dati che si inviano o ricevono, a seconda del metodo di richiesta che utilizzato.
Se si richiede un file HTML utilizzando il metodo GET, si potrebbe ricevere una risposta strutturata in questo modo:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2022 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2022 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”></code.
Il resto del file va qui
Il corpo di una richiesta o di una risposta HTTP è separato dall’intestazione da una singola riga vuota. Nell’esempio precedente non abbiamo incluso un file HTML completo per evitare confusione.
Come Monitorare e Risolvere i Problemi delle Richieste HTTP
Esistono diversi modi per monitorare le richieste HTTP su un sito web, ad esempio utilizzando strumenti di Application Performance Management (APM). Questi strumenti permettono di monitorare le “transazioni” che avvengono su un sito web, come le attività PHP, gli errori HTTP, le richieste al database e altro ancora.
Se siete utenti di Kinsta, avrete a disposizione uno strumento APM integrato che potete attivare dalla dashboard di MyKinsta. Lo strumento APM di Kinsta permette di verificare il tipo di richieste HTTP esterna che il sito sta ricevendo e di monitorarne lo stato:
Permette anche di monitorare gli errori HTTP ricorrenti, il che è utile per la risoluzione dei problemi del sito. Se vedete un errore di stato HTTP all’interno del vostro sito, potete attivare Kinsta APM, replicare l’errore e accedere ai dati della richiesta.
Lo strumento APM può anche aiutarvi a identificare gli attacchi DDoS, che dovrebbero essere abbastanza facili da individuare in quanto vedrete una raffica di richieste HTTP. Sapere se si tratta di un attacco DDoS o di un picco di traffico vi aiuterà a capire come affrontare la situazione.
Riepilogo
Capire cosa sono e come funzionano le richieste HTTP può permettere di risolvere i problemi di un sito web. Quando si verificano errori HTTP, significa che il server non è riuscito a soddisfare la richiesta del client. Sapendo qual è la richiesta e comprendendo il codice di errore nella risposta HTTP, si avranno informazioni più che sufficienti per risolvere il problema.
Per comprendere una richiesta HTTP, è necessario sapere quali metodi può utilizzare. Inoltre, bisogna sapere come sono strutturate le richieste e le risposte HTTP e comprendere i diversi codici di stato HTTP.
Se utilizzate l’hosting di applicazioni, database e WordPress gestito Kinsta, avrete automaticamente accesso a uno strumento APM che potrete utilizzare per monitorare le richieste HTTP del vostro sito web.
Iscrivitevi a Kinsta oggi stesso e avrete accesso a questo utilissimo strumento!