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://…