Tutte le comunicazioni tra client e server web avvengono mediate il protocollo HTTP (HyperText Transfer Protocol, attualmente alla versione 1.1), che è un insieme di regole per richiedere e fornire risorse Internet. “Risorsa” è un termine generale che comprende i file ma non è limitato ad essi: è qualunque informazione che possa essere identificata da un URL (la R di URL sta per risorsa). Essa è essenzialmente un metodo per dire di quale risorsa il client necessita (in altre parole l’indirizzo della risorsa).
Il tipo più comune di risorsa è il file (una pagina ipertestuale, una immagine), ma una risorsa può anche essere il risultato di una richiesta, l’output di uno script CGI o altro.

Il protocollo HTTP definisce un metodo di interazione client-server ottimizzato per le connessioni brevi e veloci necessarie per le connessione tra client web e server web. Si tratta di un protocollo generico, stateless e leggero.
Generico, significa facilmente estensibile per comprendere servizi di vario tipo, non solo transazione ipertestuali.
Stateless significa che, tra una connessione e l’altra, il server non tiene nota della connessione precedente, e quindi tutte le connessioni sono trattate alla stessa maniera, come se si trattasse ogni volta di un nuovo client.
Leggero, significa che il client si connette al server solo per il tempo strettamente necessario per trasmettere la risorsa, e quindi chiude la connessione.

Un client HTTP apre una connessione e spedisce una richiesta al server HTTP. Il server risponde con un messaggio che normalmente contiene la risorsa richiesta. Dopo aver risposto il server chiude la connessione (HTTP è un protocollo stateless, cioè non conserva informazioni di connessione tra una transazione e l’altra).

Il modello di transazione di HTTP è molto semplice, e questa è la principale ragione per cui si può facilmente estendere.
Una tipica transazione avviene così:

  1. Il client HTTP (browser) stabilisce una connessione con un server HTTP remoto; le informazioni sul server da contattare e sulla porta da usare sono comprese nel link ipertestuale; il client localizza il server e inizia il processo di connessione.
  2. Il client spedisce una richiesta; possono essere fatte richieste diverse che possono comprendere anche informazioni come: che tipo di dati il client può trattare, che linguaggio naturale preferisce, che tipo di dati viene spedito al server.
  3. Il server processa la risposta; a questo punto possono succedere cose diverse; molte risposte sono processate dal server stesso (la maggior parte delle volte il processo consiste nel localizzare un file e restituirlo al cliente); altre vengono passate ad altre applicazioni, soprattutto CGI; queste applicazioni rispondono al server il quale passa le informazioni al client.
  4. Il server risponde qualcosa al client; potrebbe essere il file richiesto, una semplice conferma che la richiesta è stata processata, oppure un messaggio di errore; in HTTP sono definiti diversi codici per comunicare cosa è successo; la richiesta potrebbe anche contenere informazioni su cosa il server sa fare e quali tipi di dati sa ritornare al client.
  5. Il server chiude la connessione; i primi protocolli, come telnet e ftp, erano stati progettati con l’idea che l’utente si collegasse ad un sistema remoto per un periodo di tempo esteso, trasmettendo comandi diversi e tenendo la connessione aperta; nel caso del web invece è probabile che la prossima connessione avvenga in un tempo abbastanza successivo alla precedente, e/o che la richiesta sia diretta ad un altro server; in tal caso non c’è vantaggio nel tenere la connessione aperta o mantebnere informazioni sul client; quindi HTTP è stato progettato per chiudere la connessione appena ha finito di processare una richiesta.