Header in informatica: a cosa servono nelle email, nei file e in ambito networking

Cos'è un header e quali informazioni restituisce: una breve disamina dei possibili utilizzi in informatica.
Header in informatica: a cosa servono nelle email, nei file e in ambito networking

In informatica, gli header sono porzioni di codice che contengono informazioni su un file, un pacchetto di dati o un messaggio. Gli header vengono utilizzati per trasferire informazioni importanti, come ad esempio il mittente e il destinatario di un messaggio, il tipo di dati contenuti in un file o il formato di un pacchetto di dati.

Per il ciclo back to basics, proviamo a spiegare brevemente il ruolo degli header nei vari ambiti dell’informatica evidenziandone gli aspetti più importanti.
Gli header sono intestazioni ovvero dati che appaiono nella parte iniziale di un file, di un pacchetto o di un messaggio, come può essere un’email: possono essere infatti trovati in diversi contesti. Di seguito segnaliamo quelli più comuni e rilevanti.

Header dei file

Nei file che utilizziamo ogni giorno, gli header si presentano come una sezione all’inizio del file stesso che contiene informazioni sul suo contenuto.
Questi header vengono utilizzati per una vasta gamma di tipi di file e sono spesso utilizzati per aiutare i programmi a riconoscere e interpretare correttamente il contenuto del file. Inoltre, gli header vengono spesso utilizzati per verifica l’integrità del file quindi al fine di accertarsi che l’elemento non sia stato danneggiato o alterato.

L’header può contenere informazioni sul formato del file e sulla versione del formato. Fatta eccezione per i file di testo, che non dispongono di alcun header, aprendo il file con un editor di testo o meglio ancora con un editor esadecimale come HxD, presentato nell’articolo sul codice binario e sulla differenza tra bit e byte, in corrispondenza dei primi byte di solito si ha un indizio della tipologia del file con cui si ha a che fare.

Non bisogna infatti sempre e solo fare affidamento all’estensione del file: talvolta essa può non rispecchiare il reale contenuto del file e il suo formato.
Se un file è danneggiato non è detto che sia davvero irrecuperabile: potrebbe essere che gli sia stata semplicemente assegnata un’estensione non corretta. Abbiamo visto come scoprirlo in modo molto semplice.

Oltre al formato del file, l’header può contenere anche i cosiddetti metadati ovvero una serie di informazioni accessorie sul contenuto del file: autore, data e ora di creazione, informazioni sul software utilizzato, sul copyright. Abbiamo visto come eliminare le proprietà aggiuntive dei file in Windows.

Header nelle email

Quando si parla di posta elettronica, gli header sono le informazioni che vengono inserite prima del corpo del messaggio vero e proprio (testo dell’email e allegati). Questi header forniscono informazioni essenziali per l’invio, il trasferimento, la ricezione e lo smistamento di ciascuna email.

Quando aprite un’email con un client di posta o una webmail, l’applicazione mostra in maniera chiara e ben strutturata indirizzo email e nome del mittente, destinatario, eventuali contatti in copia conoscenza, la presenza di eventuali allegati, l’oggetto e il corpo del messaggio con le immagini inserite in-line, ove presenti.

In Outlook di solito basta fare clic sul menu Azioni quindi su Visualizza sorgente messaggio; in Outlook.com si deve premere sui tre puntini in alto a destra del messaggio quindi scegliere Visualizza, Visualizza origine messaggio; in Gmail è sufficiente selezionare il messaggio, fare clic sui tre punti in colonna quindi su Mostra originale; in Thunderbird e in altri client tradizionali basta premere CTRL+U oppure selezionare Altro, Visualizza sorgente.

In tutti i casi, le informazioni che vengono mostrate per prime corrispondono agli header dell’email. Ecco alcuni esempi di header email che si trovano abitualmente:

  • From. Indica il mittente dell’email, ovvero l’indirizzo email del mittente.
  • To. Specifica il destinatario dell’email, ovvero l’indirizzo email del destinatario.
  • Cc. Una o più persone che riceveranno una copia dell’email, ovvero l’indirizzo email delle persone che riceveranno una copia carbone o copia conoscenza.
  • Bcc. Le persone che riceveranno una copia nascosta dell’email.
  • Subject. È l’oggetto dell’email, ovvero una breve descrizione del contenuto dell’email.
  • Date. Data e ora di invio dell’email.
  • Reply-To. L’indirizzo email a cui il destinatario deve rispondere.

A quelli “standard” possono essere abbinati molti altri header come quelli che forniscono informazioni sull’eventuale verifica del mittente, sulla priorità del messaggio, sul fatto che l’email sia spam quindi posta indesiderata e molto altro ancora.

Gli header delle email sono importanti perché forniscono informazioni chiare e strutturate sull’email e facilitano il processo di gestione dei messaggi da parte del destinatario.
I dati contenuti come header possono infatti essere utilizzati anche per filtrare e gestire automaticamente le email in base alle loro caratteristiche.

Il mittente delle email può essere facilmente falsificato: di norma, quindi, non è mai bene fare affidamento sull’indirizzo email che viene indicato.
Gli attacchi phishing via email si basano proprio sulla tecnica dell’email spoofing: viene impostato un indirizzo del mittente che non corrisponde a quello reale con il preciso intento di trarre in inganno il destinatario.

Quando si hanno dubbi sulla provenienza di un’email, è possibile stabilire da dove arriva una email e chi l’ha inviata esaminando gli header Received.
Gli header Received contengono preziose informazioni sulla sequenza di trasmissione del messaggio attraverso i server di posta elettronica.
Ogni volta che, lungo il tragitto dal mittente al destinatario, un server di posta elabora l’email, aggiunge una riga Received all’header indicando l’indirizzo IP del server che ha ricevuto la email, la data e l’ora di ricezione e altre informazioni aggiuntive. La stessa cosa avviene quando un server di posta invia l’email a un altro server.

È ovvio che se analizzando gli header Received l’email è partita da server sconosciuti (ad esempio IP e host asiatici) quando il mittente del messaggio è quello di una società, una banca o un ente italiano, è ovvio che c’è puzza di bruciato e l’email va immediatamente cestinata.

Mentre Received è un header standard definito dal protocollo SMTP (Simple Mail Transfer Protocol), alcuni server di posta aggiungono comunque header personalizzati X-Received che integrano ulteriori informazioni per la gestione dell’email.

L’header Received che si trova più in basso nell’intestazione o sorgente dell’email è di solito quello che restituisce le informazioni più utili sulla provenienza del messaggio.

Nell’esempio in figura, l’ultimo header Received rivela che il messaggio ha avuto origine da un sistema “retail” (non business) di TIM con IP pubblico indicato (95.251.x.x). Il dispositivo locale (collegato alla rete del mittente) aveva invece IP privato 192.168.1.201.
In questo specifico caso, come si vede, l’email è stata raccolta direttamente dai server di Google (by smtp.gmail.com with ESMTPSA id…).

Header in ambito networking

In ambito networking, gli header sono dati che vengono inseriti all’inizio dei pacchetti dati trasmessi in rete: non necessariamente in Internet ma anche all’interno della rete locale.
Gli header contengono informazioni importanti sul pacchetto dati come ad esempio l’indirizzo IP del mittente e del destinatario, la porta sorgente e di destinazione, il tipo di protocollo utilizzato e così via.

Alcuni esempi di header che si trovano e si usano comunemente nei pacchetti di dati sono i seguenti:

  • Header IP. Contiene informazioni sull’indirizzo IP del mittente e del destinatario del pacchetto dati, la versione del protocollo IP utilizzata e altre informazioni pertinenti.
  • Header TCP/UDP. Abbiamo visto la differenza tra pacchetti TCP e UDP. Questi header ospitano informazioni sulla porta sorgente e di destinazione del pacchetto dati, il tipo di protocollo utilizzato e altre informazioni utili.
  • Header Ethernet. Questo header contiene informazioni sull’indirizzo MAC o MAC address del mittente e del destinatario del pacchetto di dati, il tipo di protocollo utilizzato e altro ancora.

Gli header di rete sono importanti perché forniscono informazioni fondamentali per la trasmissione e l’elaborazione dei pacchetti di dati sulla rete. Inoltre, possono essere utilizzati per filtrare e gestire automaticamente i pacchetti di dati in base alla loro specifica tipologia e al tipo di informazioni che veicolano.

In generale, gli header sono presenti in molti protocolli di rete e sono ampiamente utilizzati anche a livello applicativo. Si pensi ad esempio alle applicazioni di messaggistica istantanea e di videoconferenza che usiamo ogni giorno: anche quelle fanno ampio uso degli header.

Nella pila ISO/OSI TCP è un protocollo che opera a livello di trasporto ed è orientato all’affidabilità della comunicazione (ad esempio diversamente rispetto a UDP).
Questo perché i pacchetti dati o meglio segmenti possono seguire strade diverse (“rotte”) dal mittente al destinatario: le informazioni contenute sotto forma di header servono per ricomporre i vari frammenti e fornire un ACK (Acknowledgment) ovvero un’attestazione di avvenuta e corretta ricezione al mittente.

Header TCP in breve: com’è composto

L’header TCP pesa 20 byte ed è diviso in vari campi che contengono informazioni specifiche. Alcuni dei campi più importanti dell’header TCP includono i seguenti:

  • Porte sorgente e di destinazione. Ogni segmento TCP ha una porta sorgente e una porta di destinazione che identificano il processo che ha generato il segmento e il processo che deve riceverlo.
  • Numero di sequenza. Come abbiamo accennato in precedenza, questo header esprime il numero di sequenza dei dati contenuti nello specifico segmento TCP. Il numero di sequenza viene utilizzato per garantire che i dati siano ricomposti nell’ordine corretto all’atto della ricezione dei pacchetti.
    Nel caso di UDP e di altri protocolli connectionless, infatti, il fenomeno della perdita di pacchetti o packet loss, sempre se limitato, non è così importante mentre lo è nel caso delle connessioni TCP.
  • Numero di conferma. Indica il numero di sequenza successivo che il mittente si aspetta di ricevere dal destinatario. Il numero di conferma viene utilizzato per confermare la ricezione dei dati e per gestire la finestra di ricezione del destinatario.
  • Offset intestazione. Quest’informazione specifica la lunghezza dell’header TCP. In pratica, indica il punto in cui inizia il cosiddetto payload del segmento TCP.
  • Flags. Sono informazioni di controllo essenziali per la gestione della connessione TCP (SYN, ACK, FIN, RST,…).

Header HTTP: un altro esempio interessante

Salendo di livello nella pila ISO/OSI rispetto a TCP, facciamo per tutti un esempio interessante al livello applicativo.
HTTP e ovviamente la versione crittografata HTTPS operano a livello più elevato (come ad esempio IMAP, POP3, SMTP, FTP, DHCP, SSH, Telnet, DNS, NTP,…) sono protocolli di comunicazione per lo scambio di dati tra client e server Web.

Nel contesto dell’HTTP, gli header sono utilizzati per trasmettere informazioni aggiuntive tra client e server. Le coppie nome-valore che formano gli header, possono essere divise in due categorie: header di richiesta ed header di risposta.

Gli header di richiesta vengono inviati dal client al server e includono informazioni come il metodo di richiesta (ad esempio GET, POST, HEAD), l’URL richiesto, gli header di autenticazione, le preferenze di lingua del client e le informazioni relative alla cache.
Questi header aiutano il server Web a comprendere le esigenze del client e a fornire la risposta adeguata.

Gli header di risposta vengono inviati dal server al client in risposta alla richiesta del client e includono informazioni come il codice di stato HTTP (ad esempio 200 OK, 404 Not Found, 500 Internal Server Error e così via…), il tipo di contenuto restituito (ad esempio HTML, XML, JSON), la data e l’ora della risposta e le informazioni sulla cache.
Questi header aiutano il client a comprendere come interpretare la risposta ricevuta dal server.

Gli header HTTP sono utilizzati per molti scopi, tra cui l’autenticazione, la gestione della cache, la compressione dei dati, la gestione delle sessioni e la sicurezza.

Citiamo per esempio l’header “Authorization” che viene utilizzato per fornire informazioni di autenticazione; l’header “Cookie”, invece, per gestire le sessioni tra client e server. Abbiamo visto ad esempio il significato di sessione scaduta su Facebook e su qualunque altra piattaforma Web.

Provate ad esempio il sito Security Headers e indicate i nomi a dominio dei vostri siti Web preferiti: il servizio mostra tutti gli header che vengono restituiti dal server remoto.

Ti consigliamo anche

Link copiato negli appunti