Il servizio e' molto semplice. Dal lato server, se su UNIX, e' lanciato il processo httpd, che legge i suoi files di configurazione, di solito /etc/httpd.conf e' il principale di essi. L'esatta locazione dei files di configurazione di default e' compilata nel programma 'httpd' stesso.
Il server si pone in ascolto tipicamente sul porto 80. Al ricevere di una richiesta da parte di un client consulta i files di configurazione srm.conf e access.conf per espandere eventualmente il nome file richiesto in nome file effettivo, e per verificare se il client abbia permessi d'accesso al file richiesto.
Quindi se permesso invia il file richiesto al client richiedente.
Il processo client invia una richiesta consistente in un certo numero di linee di testo seguite da una linea vuota. La prima linea e' la richiesta con i suoi parametri, seguita dall'identificativo di versione. Per esempio:
GET / HTTP/1.0
e' l'identificazione come versione 1.0 con la richiesta di tipo GET della pagina /.
Il server:
Le linee di testo che il client invia dopo la prima contengono specifiche di eventuali preferenze o informazioni sul client stesso. Per esempio:
Accept: text/html, text/plain, image/gif, image/jpeg Agent: Mozilla/4.03 [en] (X11; I; SunOS 5.5 sun4m) Referer: http://mira.olivi.elea.it/
che esprime i tipi di files accettabili dal client, la stringa identificativa del client, e l'dentificativo della pagina che ha causato l'invocazione del file.
Il server verifica che il file richiesto sia di un tipo accettabile e lo invia di ritorno al client, come messaggio contenente una testata, una linea vouta ed il testo del file richiesto.
Per esempio:
GET / HTTP/1.0 HTTP/1.0 200 Document follows Date: Wed, 18 Feb 1998 15:41:16 GMT Server: NCSA/1.5.1 Content-type: text/html <HTML> <HEAD> <TITLE> Elea Home Page <TITLE> <HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#CC0000" ALINK="#FF8800" VLINK="#000077"> ........ <body> <html>
Le richieste possibili sono:
Una richiesta HEAD e' per esempio:
HEAD / HTTP/1.0 HTTP/1.0 200 Document follows Date: Wed, 18 Feb 1998 15:46:38 GMT Server: NCSA/1.5.1 Content-type: text/html
La richiesta HEAD e' utile ai client che compiono il caching locale di pagine. Se la pagina sul server ha la stessa data di aggiornamento di quella nella cache, allora non viene trasferita, altrimenti segue una richiesta GET.
La richiesta PUT permette di inviare una pagina al server, compatibilmente con permessi di accesso da parte del client e permessi sui file del server. Alla testata in questo caso segue una linea vuota, poi il file che il client vuole trasferire al server. E' una richiesta usata per il publishing automatico di pagine in alternativa al protocollo FTP. Pochi sono i server HTTP che supportano la richiesta PUT, per motivi di sicurezza.
PUT /index1.html HTTP/1.0 HTTP/1.0 501 Not Implemented Date: Wed, 18 Feb 1998 15:58:31 GMT Server: NCSA/1.5.1 Content-type: text/html <HEAD>lt;TITLE>501 Not Implemented<TITLE>lt;HEAD> <BODY>lt;H1>501 Not Implemented<H1> We are sorry to be unable to perform the method PUT to non-script at this time or to this document.<P> <BODY>
Il client HTTP si chiama un browser. E' qui che risiede l'intelligenza del protocollo, non nel server che e' un semplice server di file, con controllo accessi.
Il 'browser' legge pagine, ovvero files di testo formattate nel linguaggio Hyper Text Markup Language (HTML). Una pagina consiste di testo HTML e immagini inline di vari tipi, tra i piu' comuni i formati GIF e Jpeg. Elementi di pagina possono anche essere files di suoni, video, e altri elementi multimediali che il browser supporta direttamente o tramite helper applications esterni. I files di qualsiasi tipo sono codificati secondo lo standard Multimedia Internet Mail Extensions (MIME).
Il browser apre una connessione con richiesta GET per la pagina principale e una connessione per ciascuno degli elementi multimediali contenuti 'inline' nella pagina.
Alcuni tag di HTML della pagina possono definire un anchor di un link ipermediale. Cliccando o evidenziando opportunamente tali 'anchor' viene effettuato il caricamento di un'altra pagina.
Ogni richiesta di pagina o di elementi inline e' una connessione puntuale indipendente dalle altre e implica una operazione completa di scambio HTTP tra il browser e un server.
Non viene mantenuta la connessione anche se il browser ha parecchi elementi di pagina da scaricare dallo stesso server. HTTP ha avuto un notevole successo per questa sua semplicita' che pero' implica un traffico di rete elevato.