All’inizio fu ARPANET. Una rete di calcolatori nata per scopi militari, estesa poi al collegamento di istituti governativi ed istituzioni scientifiche e di ricerca. Nasceva così Internet, la “rete delle reti” che iniziava ad accogliere anche entità commericali e di singoli individui.
Poiché l’impostazione di Internet inizialmente era improntata alla ricerca scientifica, uno dei principali scopi era quello della pubblicazione di documentazione scientifica, per cui il problema principale era quello di correlare tra di loro i vari documenti prodotti e di mantenere queste correlazione anche quando i documenti stessi venivano aggiornati. La risposta a questo problema fu l’ipertesto (hypertext): un documento nel quale possono essere inserite le opportune istruzioni per raggiungere una determinata parte di un altro documento che può risiedere su quasiasi sistema connesso alla rete.
È essenzialmente per questo che nacque il protocollo HTTP (HyperText Transfer Protocol), la cui idea di base è quella del meccanismo client-server per la visualizzazione del contenuto di file tra sistemi collegati ad una stessa rete. Un server HTTP (o web server) è un’applicazione che rimane in ascolto sulla porta TCP (o UDP) 80 di eventuali richieste inoltrate dai relativi client (o browser).
Questo meccanismo è stato messo in pratica per la prima volta il 6 Agosto 1991, per mezzo del server HTTP httpd e del client WorldWideWeb13, sviluppati sul sistema operativo NeXTSTEP14 da Tim Berners-Lee15, un consulente del CERN. Successivamente, la diffusione dei server HTTP è stata aiutata dallo sviluppo dei browser che sfruttano tali server, visualizzando il contenuto degli ipertesti. Tra i vari browser va ricordato anche Mosaic (sviluppato presso il NCSA - National Center for Supercomputing Applications - nell’Università dell’Illinois)16 che segnò l’inizio del web per tutti.17
Il protocollo HTTP è basato su una serie di comandi (GET, POST, GET HEADER, ...) e dalla definizione degli URL (Uniform Resource Locator).
Un URL identifica univocamente un documento, contenendo al suo interno l’identificatore del server che ospita il documento stesso ed eventuali parametri di corredo alla richiesta, secondo la seguente sintassi
protocol://host[:port][/document_path][?parameter]
dove
[da completare ...]
Il primo linguaggio per la scrittura degli ipertesti è stato l’HTML (HyperText Markup Language). Esso è un linguaggio basato su apposite parole chiavi dette tag (marcatori) che indicano una specifica caratteristica per il testo da essi gestito. Generalmente i tag vengono utilizzati a coppie: un tag indica l’inizio di una caratteristica e un’altro ne indica la fine, in maniera tale che la caratteristica da essi gestita venga attivata per il testo tra essi racchiuso. In particolare, un tag è una parola chiave racchiusa tra parentesi angolari, cioè tra i simboli ‘<’ e ‘>’. Un esempio di tag è <body>. Esso indica l’inizio della caratteristica ‘body’, cioè indica che da lì inizia il testo da cosiderare come corpo della pagina web. Il tag che indica invece la terminazione della caratteristica ‘body’ è </body>. Quindi, generalmente, la sintassi utilizzata per definire una caratteristica nel codice html è la seguente
<tag_name [options]>text</tag_name>
dove tag_name indica una caratteristica da applicare al testo (text) compreso tra
<tag_name> e </tag_name>. Inoltre, dipendentemente dal tipo di tag, possono anche essere
specificate delle opzioni ulteriori (options).
Le caratteristiche possno anche essere annidate, facendo attenzione al corretto annidamento dei relativi tag. ad esempio
<tag1><tag2>text</tag2></tag1>
Nella sintassi HTML le interruzioni di riga vengono considerate come spazi (carattere ‘ ’)
e più spazi consecutivi vengono considerati come un singolo spazio. Quindi il testo precedente
può anche essere scritto come
<tag1>
<tag2>
text
</tag2>
</tag1>
Esistono anche dei tag che non hanno il corrispondente terminatore, ma sono
pochissimi.
<html>
<head>
[definizioni della pagina, stili, script, ...]
</head>
<body>
[corpo della pagina]
</body>
</html>
Uno dei tag più importanti dell’HTML è quello relativo alla caratteristica anchor (àncora),
che costituisce l’ossatura del documento ipertestuale. Essa utilizza il tag <a> con opportune
opzioni che indicano il riferimento ipertestuale:
<a href="uri">text</a>
In questo modo il testo text sarà un hyperlink (collegamento ipertestuale), cioè se cliccato
con il tasto sinistro del mouse, farà visualizzare al browser l’elemento (pagina web) indicato
da uri. Un esempio di hyperlink è quello seguente
<a href="http://www.w3.org">vai al sito del W3C</a>
In questo caso cliccando con il tasto sinistro del mouse sulla scritta ‘vai al sito del W3C’ il
browser visualizza la pagina web di default del sito http://www.w3.org.
Un hyperlink è generalmente visualizzato dai browser in un colore particolare e sottolineato, per evidenziarne tale caratteristica, ma il modo di visualizzare un hyperlink può anche essere personalizzato. Generalmente comunque, quando il cursore del mouse si trova sopra ad un hyperlink, la sua forma consueta (freccia) cambia (in genere diventa una mano) indicando appunto la possibilità di cliccare il testo.
La definizione dello standard HTML, arrivata ad oggi alla versione 4.01, è a cura del W3C (Worl Wide Web Consortium)18, ed è reperibile da http://www.w3.org/TR/html4.
Esistono anche appositi programmi, editor HTML, che consentono una più agevole scrittura di pagine HTML. Esempi di questo tipo sono Quanta Plus19, Bluefish20 e NVU21.
In tempi recenti si è andato affermando un metalinguaggio che permette la definizione rigorosa di linguaggi di tipo markup e la possibilità di verificare se un documento, scritto in un certo linguaggio, rispetta le regole sintattiche e grammaticali del linguaggio stesso. Questo metalinguaggio è l’XML (eXtensible Markup Language)22.
Il consorzio W3C ha definito un nuovo linguaggio HTML secondo le specifiche XML: l’XHTML. Tale linguaggio è ancora in continua evoluzione.
[da completare ...]
Gli ipertesti scritti per mezzo del linguaggio HTML23 (cioè le pagine HTML) sono essenzialmente dei file “statici”, nel senso che la visualizzazione del loro contenuto, cioè quello che viene mostrato dai browser, non cambia fintantoché il file non viene modificato. Essi non sono in grado di rispondere dinamicamente alle varie richieste inoltrate per mezzo dei browser. Ad esempio, un ipertesto che contiene l’elenco degli utenti di un sistema va aggiornato ogni volta che si aggiunge o rimuove un utente dal sistema stesso, poiché non è in grado di fornire automaticamente l’elenco degli utenti al client che ne fa richiesta, ma si limita a inviargli il contenuto della pagina HTML contenente un elenco degli utenti, che deve essere modificata in accordo con l’elenco reale degli utenti (memorizzati da un’altra parte nel sistema).
La prima risposta a questa esigenza è stata la creazione dell’interfaccia CGI (Common Gateway Interface): una specifica che consente ai server HTTP di eseguire dei programmi che forniscono come output la pagina web da inviare al browser. In questo modo, quando il browser inoltra una richiesta al server HTTP specificando un file CGI con eventuali parametri, il server HTTP lancia in esecuzione il file CGI richiesto, passandogli gli eventuali parametri specificati. Quest’ultimo, se opportunamente programmato, può effettuare l’opportuna operazione per esaudire la richiesta e fornire come output una pagina HTML che il server HTTP invia al browser. In questo modo la risposta del server HTTP è frutto della logica programmata presente all’interno del file CGI.
Ad esempio, si consideri il file ciao.cgi contenente il programma di seguito riportato
#include <stdio.h> main(argc, argv) int argc, char *argv[]; { printf("Content-Type: text/html\n\n"); printf("<html>\n"); printf("<head><title>Test CGI</title></head>\n"); printf("<body>\n"); printf("Questa è una pagina di test GCI<br>\n"); if (argc > 1) { printf("Ciao %s\n", argv[1]); } else { printf("Prova a specificare un parametro...\n"); } printf("</body>\n"); printf("</html>\n"); }
In questo modo il server HTTP può quindi lanciare in esecuzione dei programmi e ciò pone di fronte a due problematiche
La sempre maggiore richiesta di funzionalità ha spinto allo sviluppo sia dei server HTTP che dei browser.
Nella maggior parte dei browser è stata aggiunta la capacità di eseguire degli script presenti all’interno delle stesse pagine HTML (routine scritte in linguaggi interpretati come, ad esempio, il Javascript24) o dei programmi più complessi (come, ad esempio, le applet Java).
I server HTTP sono stati dotati della capacità di poter gestire dei componenti software in grado di esterndere le funzionalità del server stesso. Alcuni componenti consentono al server HTTP di interpretare ed eseguire degli script scritti in appositi linguaggi di programmazione, come ad esempio il PHP (PHP Hypertext Preprocessor)25, il Perl26, il Python27, ...
[da completare ...]
Per com’è definito, il protocollo HTTP è sessionless, cioè non ha il concetto di sessione, infatti esso è stato progettato per trasmettere pagine HTML ad un browser che ne faccia richiesta senza mantenere alcuna correlazione tra esse. La possibilità di poter avere un sistema per gestire la sessione, ovvero la capacità di considerare le richieste che vengono inoltrate ad un server da uno stesso browser tra loro correlate, è stata però auspicata in breve tempo. Per realizzarla sono state introdotte caratteristiche particolari sia lato server che lato client.
Dal lato server, sono stati sviluppati dei meccanismi che permettono di mantenere un ambiente relativo ad una connessione al server da parte di un browser, cioè un’insieme di variabili di sessione, il cui contenuto permane per tutta la durata della sessione, che è generalmente dell’ordine di una decina di minuti dall’ultima richiesta inoltrata al server HTTP. In questo modo il server riesce a correlare le pagine che vengono richieste da uno stesso browser per mezzo del contenuto delle variabili di sessione.
Dal lato client, i browser sono stati messi in grado di gestire particolari informazioni inviate dal server HTTP tra una richiesta e l’altra: i cookie. In questo modo il server HTTP può memorizzare, per mezzo del browser, specifiche informazioni sulla macchina client, che il browser stesso può restituirgli (su richiesta del server), così può essere gestita la sessione. Questa tecnica è molto più invasiva della precedente ed i cookie possono essere utilizzati anche per altri scopi, dalla pubblicità mirata, all’ottenimento di particolari informazioni sul sistema client (ad esempio il server potrebbe arrivare a sapere se sulla macchina client è stata installata una specifica applicazione, ...).
[da completare ...]