prof.
Nunzio Brugaletta |
EsNET |
Uno dei servizi di rete che si sono maggiormente diffusi, a partire da Internet, è senza dubbio il Web. Le tecnologie legate ad esso hanno avuto negli anni una evoluzione notevole che si è dimostrata invasiva anche in campi che prima si pensava impermeabili a tali tecnologie: si fa riferimento, principalmente, al cosiddetto web programming nella cui definizione si comprende un insieme di tecnologie che consentono di sviluppare applicativi che girano all'interno delle pagine web. La facilità con cui si possono sviluppare applicazioni e la potenza disponibile hanno fatto sì che è sempre più frequente trovare applicazioni che utilizzano tali tecnologie anche fuori da Internet, per esempio, nelle reti locali. È questo il motivo della scelta di trattare in dettaglio, in questi appunti, il funzionamento del www in generale e del protocollo HTTP che ne sta alla base, tralasciando altri protocolli anche enormemente diffusi e utilizzati (per esempio POP3 o SMTP).
Dal punto di vista dell'utente, il Web è un insieme di documenti (le pagine web), prodotte in un determinato formato (HTML, Hyper Text Markup Language) e disponibili in host sparsi in tutto il mondo. Le pagine sono visualizzate utilizzando un programma chiamato browser e contengono riferimenti (collegamenti ipertestuali) che, se attivati, consentono la visualizzazione della pagina collegata. Il browser rileva, per esempio, il clic del mouse su un collegamento e per mezzo dell'URL (Uniform Resource Locator) è in grado di richiedere la pagina. L'URL di una pagina assume una forma del tipo http://ennebi.solira.org/index.htm dove http specifica il protocollo da utilizzare e il seguito indica la pagina richiesta con il nome di dominio e quello della pagina specifica.
Il browser (client) apre un socket su una porta non privilegiata e tenta una connessione TCP ad un determinato host, specificando l'IP e la porta 80 di ascolto del server web. Il server web accetta la connessione TCP, riceve il nome del file richiesto, recupera il file, lo spedisce al client che ne ha fatto richiesta e chiude la connessione.
Quello esposto è in sintesi HTTP (Hyper Text Transfer Protocol), il protocollo di comunicazione fra il browser e il server web. Le operazioni previste dal protocollo vengono chiamate metodi e i più comuni sono il metodo GET e il metodo POST.
Il metodo GET è utilizzato nella richiesta delle pagine. Il traffico di rete in questo caso va dal server al client.
Il metodo POST è utilizzato per accodare alla richiesta di una pagina, dati prodotti dal client. Il traffico di dati, in questo caso, va dal client al server. È utilizzato, per esempio, per aggiungere un messaggio in un newsgroup o per inviare i dati per una interrogazione ad un database.
Si propone ora un esempio di richiesta, di pagina web, inoltrata utilizzando il programma Telnet. Si tratta di un programma nato per effettuare login ad una macchina remota e che può essere utilizzato per gestire a mano qualsiasi protocollo di livello applicazione: basta conoscerne i metodi.
Nel login ad una macchina remota, per motivi di sicurezza (visto che viaggia, in chiaro, in rete anche la password per il login stesso), sono stati introdotti successivamente protocolli che consentono la trasmissione di dati in formato crittografato, ma Telnet rimane, quando non ci sono problemi di sicurezza, un programma ancora valido.
$ telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. GET /~nunzio/richiesta.html HTTP/1.1 Host: localhost HTTP/1.1 200 OK Date: Sun, 12 Mar 2006 10:35:26 GMT Server: Apache/1.3.27 (Unix) Debian GNU/Linux PHP/4.1.2 Last-Modified: Fri, 10 Mar 2006 07:54:31 GMT ETag: "604d7-1b8-441130b7" Accept-Ranges: bytes Content-Length: 440 Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>richiesta</title> </head> <body> <p align="center"><h1>Richiesta completamento nome</h1></p> <br><br> <FORM action="risposta.php" method="POST"> Inserire nome: <INPUT type="text" name="nome"> <br><br> <INPUT type="submit" value="Invia"> </FORM> </body> </html> Connection closed by foreign host.
Il programma viene lanciato specificando l'IP dell'host con cui ci si vuole collegare e il numero di porta.
Subito dopo la risposta di connessione effettuata da parte del server, si specificano le richieste:
GET /~nunzio/richiesta.html HTTP/1.1 Host: localhost
la richiesta, per mezzo del metodo GET, specifica il nome della pagina e la versione del protocollo da utilizzare (nell'esempio la 1.1). Nelle righe successive si possono inserire altre richieste: per esempio di invio di immagini da visualizzare nella pagina. In ogni caso è necessario specificare l'host. La sequenza di righe di richieste termina con una riga vuota. Dopo l'invio della pagina richiesta, l'host, chiude la connessione.
Si sarebbe potuto specificare, dopo GET, il nome della sola pagina seguito da Invio. In questo caso si sarebbe avuto la risposta immediata dal server. Si tratta di HTTP/1.0 (la prima versione del protocollo) in cui, per ogni singola richiesta, si instaura una connessione. Questo modo di procedere può andare bene se la pagina è costituita da solo testo. In presenza di immagini si sarebbe dovuto effettuare una connessione per ogni richiesta di immagine contenuta nella pagina. Se si adopera invece HTTP/1.1 si possono effettuare più richieste comprese in una singola connessione (connessioni persistenti): è questo il modo di operare corrente.
La risposta del server comincia con un codice, nel caso specifico 200, che indica lo stato della risposta e che precede l'intestazione contente informazioni varie sul server e la pagina. Dopo una riga vuota comincia la pagina vera e propria.
Il codice 200 indica che la richiesta è stata eseguita con successo. I codici che iniziano con 3 indicano pagine spostate, quelli che iniziano con 4 indicano errori nel client (400 pagina vietata o 404 non trovata), quelli che iniziano con 5 indicano errori nel server.
Il dialogo esposto nell'esempio è sostanzialmente quello che si instaura tra il browser e il web server. Il browser, che agisce al livello Applicazione del TCP/IP, da una parte presenta all'utente una interfaccia che gli consente di introdurre facilmente la richiesta della pagina html, dall'altra traduce detta richiesta, utilizzando i metodi del protocollo al proprio livello (HTTP), in modo da essere comprensibile al web server. Il browser si comporta, in sostanza, da front-end per l'inserimento delle richieste effettive da inviare al web server (quelle espresse nell'esempio di uso di Telnet).
http://ennebi.solira.org |
ennebi@solira.org |