WWW, HTTP e HTTPS

Sicuramente tra le più note applicazioni che utilizzano TCP/IP è WWW (World Wide Web), che utilizza il protocollo HTTP per realizzare la comunicazione.
Durante i primi anni di Internet, i trasferimenti di dati FTP coprivano circa un terzo del traffico, più di qualsiasi altra applicazione. Dalla sua nascita, nei primi anni ’90, tuttavia, il Web ha avuto un tasso di crescita molto più elevato e, nel 1995, il suo traffico ha superato FTP, occupando la maggior parte della larghezza di banda della dorsale Internet, eclissando completamente nel 2000 le altre applicazioni. Oggi, gli utenti utilizzano e conoscono il Web più di tutte le altre applicazioni Internet; la maggior parte delle società ha cataloghi on-line e siti Web; negli annunci pubblicitari è ormai di uso comune inserire anche riferimenti al Web.
In altre parle, oggi, Internet e il Web indicano per molti utenti la stessa cosa!

Concettualmente, il Web consiste di molti documenti, chiamati pagine Web, accessibili su Internet, contenenti elementi di varia natura: testo, audio, video, collegamenti ipertestuali ad altri documenti correlati.
I principali elementi usati per implementare il Web sono due: un browser Web, ovvero un programma applicativo che l’utente esegue per accedere e visualizzare le pagine Web, e che si comporta come un client per contattare il server Web appropriato, per ottenere una copia della pagina specificata.
Queste pagine vengono rappresentate mediante HTML (HyperText Markup Language), un semplice linguaggio di formattazione dei documenti, utilizzato per preparare le pagine che devono essere visualizzate dai browser Web.
Un documento HTML è costituito da un file contenente del testo e dei comandi, detti marcatori, che forniscono le linee di riferimento per la visualizzazione (sono racchiusi tra i simboli < e >).
A ogni pagina Web è assegnato un nome univoco, detto URL (Uniform Resource Locator), che inizia con la specifica dello schema usato per accedere all’elemento (indica il protocollo di trasferimento usato). Ad esempio un URL che segue lo schema HTTP ha la seguente forma:

http: // hostname [: port ] / path [; parameters] [? query]

dove:

Gli standard del protocollo distinguono tra forma assoluta degli URL (ad esempio, http://dia.unisa.it/professori/ads/), e forma relativa. Un URL relativo ha senso solo se il server è gia stato determinato. Ad esempio, quando si è certi di comunicare con il server dia.unisa.it, per indicare il documento denominato dall’URL assoluto precedente, basta solo la stringa /professori/ads/.


HTTP

L’accesso al Web è molto semplice e inizia con un URL: l’utente immette l’URL attraverso la tastiera o sceglie un’opzione che fornisce un URL al browser. Il browser analizza sintatticamente l’URL, estrae le informazioni e le usa per ottenere una copia della pagina richiesta.
Il protocollo usato per la comunicazione tra un browser e un server Web o tra macchine intermedie e i server Web, è noto come HTTP (HyperText Transfer Protocol) e ha le seguenti caratteristiche:

Il formato dei messaggi HTTP è simile a quello di MIME (Multipurpose Internet Mail Extensions), che è un’estensione del normale protocollo di posta elettronica (SMTP), che originariamente fu progettato per trasmettere solamente messaggi in ASCII puro.
MIME (Multipurpose Internet Mail Extensions), quindi, non è un protocollo, ma uno standard definito per spedire dati non ASCII attraverso la posta elettronica. Un messaggio in formato MIME include delle informazioni aggiuntive che permettono di dividere il messaggio in parti, includere allegati e specificare un particolare formato per ogni parte. MIME definisce sette tipi principali: Text, Image, Audio, Video, Application, Multipart, Message. Per ogni tipo è possibile specificare un sottotipo, e il tipo Multipart permette di creare un messaggio a più parti.
Ogni trasmissione HTTP contiene un’intestazione, una riga vuota e l’elemento che viene trasmesso. Nell’intestazione è possibile specificare la dimensione dell’elemento, il suo tipo, la codifica e il linguaggio usati. L’intestazione permette anche di concordare le opzioni.


GET, POST, Status

Nel caso più semplice, un browser, per ottenere una pagina, parte dall’URL, estrae la sezione del nome dell’host, usa il DNS (Domain Name Server) per tradurre il nome nell’indirizzo IP equivalente e lo utilizza per stabilire una connessione TCP con il server. Una volta stabilita la connessione, browser e server utilizzano HTTP per comunicare: il browser trasmette una richiesta per ottenere una certa pagina e il server risponde inoltrandone una copia.
Siccome i browser tentano comunque di visualizzare ciò che è stato ritornato dal server, nel caso di errori, i server di solito generano messaggi di errore in HTML.
Per richiedere una pagina, un browser invia un comando GET HTTP al server. La richiesta consiste in una singola riga di testo che inizia con la parola chiave GET seguita da un URL e dal numero di versione di HTTP. Nel caso dell’esempio precedente, il browser può inviare:

GET http://dia.unisa.it/professori/ads/ HTTP/1.1

Un altro comando spesso utilizzato è POST HTTP, che permette di inviare informazioni (parametri di input) all’URL specificato, sottoforma di coppie attributo=valore che vengono processate dal server, sulla base di come è configurato e di come è fatto il file a cui vengono “postate”.
Spesso è usato per effettuare annotazioni sulle risorse già esistenti o estendere dei database, inviare un messaggio a un indirizzo di posta elettronica o il contenuto di un modulo a un programma. In realtà, sia GET che POST possono essere usati per inviare al server i dati estratti da una form, con la differenza che POST li invia nel corpo del messaggio di richiesta e GET come parte dell’URL.
La funzione che deve essere eseguita in seguito al metodo POST, è determinata dal server.

HTTP, inoltre, consente a un mittente di inviare richieste condizionali: quando un browser invia una richiesta, aggiunge un’intestazione che specifica i termini in cui la richiesta dovrebbe essere servita; se la condizione non è soddisfatta, il server non ritorna l’elemento richiesto.
Le richieste condizionali, quindi, consentono ai browser di ottimizzare la comunicazione evitando trasferimenti non necessari. La richiesta If-Modified-Since specifica una delle condizioni più semplici: permette a un browser di evitare il trasferimento di un elemento, a meno che questo non sia stato aggiornato a partire da una data specificata. Ad esempio, un browser può includere in una richiesta GET la seguente intestazione:

If-Modified-Since: Sun, 30 May 2005 16:00:00 GMT

In questo modo si evita un trasferimento se l’elemento richiesto è antecedente il 30 Maggio 2005 all’ora indicata.
Un’altra richiesta possibile è If-None-Match, che permette al browser di verificare che nessuno degli elementi ottenuti dal server facciano parte di quelli specificati da questo parametro.

A seguito di una di queste richieste da parte dei client, i server HTTP rispondono utilizzando linee di status, che informano il browser sull’esito di una richesta. Gli status contengono 3 campi: versione del protocollo HTTP, status code e descrizione. Possibili esempi di status code sono:


HTTPS

A metà degli anni ’90, quando ormai era evidente che la sicurezza era fondamentale per il commercio su Internet, molti gruppi hanno proposto meccanismi di sicurezza da usare con il Web. Una di queste proposte, diventata uno standard, è nota come SSL (Secure Sockets Layer), un protocollo aperto e non proprietario, sviluppato da Netscape. Quando un client usa SSL per contattare un server, il protocollo SSL permette a ogni lato di autenticare se stesso all’altro. I due lati, poi, concordano di scegliere un algoritmo di crittografia supportato da entrambi. Infine, SSL consente ai due lati di stabilire una connessione crittografata (cioè, una connessione che usa l’algoritmo di crittografia scelto per garantire la privacy).
Come ovvia conseguenza alla standardizzazione del protocollo SSL, nasce HTTPS, che non è un protocollo a sé stante, ma è il normale protocollo HTTP con il supporto sottostante di SSL.
A livello applicativo, quando il protocollo HTTP deve essere supportato da SSL durante una connessione, l’URL si indica con https://