Introduzione agli Header HTTP
A che servono gli header HTTP? Servono a capire che cosa succeda durante la connessione ad un sito o ad un servizio web, e possono essere utili per inquadrare al meglio eventuali problemi o bug, e poterli risolvere. Per capire cosa sia un header HTTP dobbiamo chiederci cosa succeda dietro le quinte quando, ad esempio, proviamo ad aprire un indirizzo internet nel nostro browser.
Se digitiamo (un esempio, un sito a caso):
trovalost.it
il client avrà inviato una richiesta su protocollo HTTPS (Hyper Text Transfer Protocol Secure), al web server del sito, mediante DNS. Avrà richiesto di vedere nello specifico la home page del sito, ovviamente:ed il server dovrà fornire una risposta del tipo “OK”, se nulla ostacola l’operazione, oppure “KO” in caso di errore/i.
Scopri il tool per gli header HTTP del nostro sito
Differenza tra richieste GET e POST
In genere possiamo vedere gli header HTTP mediante una linea di comando del programma cURL: le modalità principali sono mediante GET o mediante POST. La differenza tra i due è semplice: le GET appendono gli eventuali parametri della richiesta direttamente nell’URL, sia in chiaro che in forma crittografata, mentre le POST le includono sempre nel corpo (body) della richiesta. Ci sono anche altri tipi di richieste che possono essere utili in questo ambito, come ad esempio UPDATE.
I browser in qualche modo possono emulare quasi tutte e due le modalità , sia POST che GET, ma con qualche limitazione (in alcuni casi): per questo è molto consigliabile fare debug usando client dedicati come ad esempio PostMan.
Header HTTP di tipo GET
Sono le cURL classiche, per cosଠdire, e si possono formulare come segue. Le risposte saranno tipicamente JSON o XML da parserizzare e rendere (con un ulteriore passaggio) all’interno di un risultato finale: un PDF o una pagina HTML, di norma.
in formato JSON:
curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://host/path
in formato XML:
curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://host/path
Header HTTP di tipo POST
Incorporano i dati nel body della richiesta, quindi in questo caso passeremo i parametri mediante –data:
Inviare parametri
curl --data "param1=value1¶m2=value2" http://host/path
Fare upload di un file
curl --form "[email protected]" http://host/path
fare una chiamata REST su un file
curl -X POST -d @myfile http://host/path
fare login in un sito
curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://host/Login
curl -L -b headers http://host/
Gli HTTP headers (intestazioni HTTP) permettono al client ed al server di scambiarsi le informazioni che gli servono e comunicare secondo una convenzione comune. Un header HTTP (ma anche HTTPS per estensione) è fatto da una triade del tipo:
- un nome;
- un segno di due punti (:);
- un valore;
Spazi e a capo, in questo frangente, vengono solitamente ignorati.
Usa il codice
189ed7ca010140fc2065b06e3802bcd5
per ricevere 5 € dopo l'iscrizione
Esempi di header HTTP
Gli header HTTP sono in genere trasmessi singolarmente o in gruppo, nella forma seguente:
Accept: text/html
oppure:
Accept-Charset: utf-8
oppure, ancora:
Content-Length: 348
ed indicano rispettivamente: un contenuto in HTML, un charset impostato a UTF-8 ed una dimensione del contenuto di 348 byte. Quindi sono insiemi di coppie:
chiave: valore
dove la chiave indica il nome della proprietà e valore il suo… valore, per l’appunto.
Come trovare gli header HTTP
Gli header HTTP si possono identificare aprendo una linea di comando (terminale) sul proprio computer, e digitando un comando cURL, nella forma base:
curl -I www.google.it
che restituirà qualcosa del genere, da leggersi come elenco di coppie per riga. Nell’esempio vediamo, tanto per capirci, che il campo Date ha valore Sun, 22 Mar 2020 11:39:30 GMT, che quello Expires è pari a -1, che il campo Cache-Control è impostato su private, max-age=0 e cosଠvia.
HTTP/1.1 200 OK
Date: Sun, 22 Mar 2020 11:39:30 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP=”This is not a P3P policy! See g.co/p3phelp for more info.”
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2020-03-22-11; expires=Tue, 21-Apr-2020 11:39:30 GMT; path=/; domain=.google.it; Secure
Set-Cookie: NID=200=KXE32BblqlTYt6X7Tqiu-4JKuLSvzyGGtS-C231TbzOvvmZW7wkwlQsgiRKXnC5LGgbc-6MztIkB1kAwerTBJ8OM7LN5t409YXVjO6ZpsLxgm_BKReE0oLUi5YtEUNVF7kFDTjxk1TEBnLzps86Sbg_yNe2pRe5tecz3UapbH38; expires=Mon, 21-Sep-2020 11:39:30 GMT; path=/; domain=.google.it; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding
In alternativa, se si preferisce un tool con interfaccia grafica, si può ricorrere al tool per trovare l’IP di un dominio sul nostro sito, che mostra anche informazioni sugli header.
Tipologia di Header HTTP
Gli header HTTP sono in genere di quattro tipi, che corrispondono a specifici record che vengono o meno riempiti di dati:
- General header: sono header comuni sia al client che al server
- Request header: header di richiesta con info varie su come è stata effettuata e da chi
- Response header: header di risposta con info sulla posizione del server e simili
- Entity header: contiene informazioni aggiuntive come dimensione della risposta e tipo-MIME.
Un altro modo per raggrupparli prevede di suddividerli sulla base dello scopo che hanno: si chiamano header End-to-End, che corrispondono a quello iniziale e finale di ogni coppia richiesta/risposta, e poi abbiamo gli header Hop-By-Hop che invece sono utili a livello di trasporto, e sono ad esempio:
Usa il codice
189ed7ca010140fc2065b06e3802bcd5
per ricevere 5 € dopo l'iscrizione
Connection
,Keep-Alive
,Proxy-Authenticate
,Proxy-Authorization
,TE
,Trailer
,Transfer-Encoding
,Upgrade
.
Lista header di autenticazione
WWW-Authenticate
- Serve a definire il metodo di autenticazione per la risorsa o URL richiesto
Authorization
- Contiene in genere le credenziali di accesso, username e password
Proxy-Authenticate
- definisce il reverse proxy utili per l’autenticazione
Proxy-Authorization
- Contiene in genere le credenziali di accesso del reverse proxy, quindi username e password
Lista header di cache
Age
- Età del contenuto in cache, espresso in secondi.
Cache-Control
- Indica la direttiva di cache adottata dalla pagina.
Expires
- Indica ora e data di scadenza della cache.
Pragma
- Specifiche della cache con varie ripercussioni nel suo funzionamento
Warning
- Avviso di eventuali problemi o errori di configurazione
Lista header di Client
-
Lista header Conditionals
Sono spesso vitali per le prestazioni della pagina web in termini di velocità di caricamento, in molti casi, ed interessano la parte SEO tecnica del sito.
Last-Modified
- è utile per determinare la data di ultima modifica di un URL, in modo che (ad esempio) browser e motori di ricerca non ci passino inutilmente più volte, consumando crawl-budget. Dipendono dalle condizioni
If-Modified-Since
oppureIf-Unmodified-Since
. ETag
- Identifica la versione della risorse, questa volta usando le condizioni
If-Match
oIf-None-Match
If-Match
If-None-Match
If-Modified-Since
If-Unmodified-Since
Lista header di Connection
Lista header di Content negotiation
Lista header di Controllo
Lista header per Cookies
Cookie
- Lista dei cookie memorizzati nella sessione client-server attuale.
Set-Cookie
Cookie2
Set-Cookie2
-
Lista header CORS
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Allow-Headers
Access-Control-Allow-Methods
Access-Control-Expose-Headers
Access-Control-Max-Age
Access-Control-Request-Headers
Access-Control-Request-Method
Origin
Lista header Do Not Track
Lista header Downloads
Lista header Message body
Content-Length
Content-Type
Content-Encoding
Content-Language
Content-Location
-
Lista header Proxies
Lista header Redirects
Lista header Request context
Lista header Response context
Lista header Range requests
Lista header Security
Content-Security-Policy
(CSP)Content-Security-Policy-Report-Only
Public-Key-Pins
(HPKP)Public-Key-Pins-Report-Only
Strict-Transport-Security
(HSTS)Upgrade-Insecure-Requests
Lista header Server-sent events
Lista header Transfer coding
Lista header WebSockets
Sec-WebSocket-Key
- …
Sec-WebSocket-Extensions
- …
Sec-WebSocket-Accept
- …
Sec-WebSocket-Protocol
- …
Sec-WebSocket-Version
- …
Lista header di altro tipo
Date
Large-Allocation
Link
- …
Retry-After
SourceMap
Upgrade
Vary
X-DNS-Prefetch-Control
X-Firefox-Spdy
- …
X-Requested-With
- …
X-UA-Compatible
- …
👇 Contenuti da non perdere 👇
- Domini Internet 🌍
- Lavoro 🔧
- Marketing & SEO 🌪
- monitoraggio servizi online 📈
- Spiegoni artificiali 🎓
- Svago 🎈
- 💬 Il nostro canale Telegram: iscriviti
- 🟢 Guida pratica ai prompt di ChatGPT
- 🔴 Trasformata del coseno discreto (DCT): cos’è e come funziona
- 🟠 FB: Someone tried to log into your account, user ID: è phishing