Quasi tutti conoscono il significato delle parole client e server, e il ruolo che esse occupano nel funzionamento di internet. Col presente articolo vogliamo fare una panoramica su alcune sfumature e significati associati a queste parole, come ad esempio client FTP, client HTTP, web server, application server e database server. In tutti questi casi, come vedremo, il concetto di base è sempre il medesimo, ma il contesto in cui viene utilizzato può essere molto diverso.

Un server è un qualsiasi programma, o meglio applicazione, che si occupa di restare in ascolto delle richieste ed eventualmente esaudirle. La differenza principale tra un server e una comune applicazione è che il server deve essere in grado di gestire contemporaneamente più di una richiesta per volta, anzi: spesso un server deve gestire centinaia o migliaia di richieste al minuto. Possiamo pensare al server come al cuoco di un ristorante. Tutte le ordinazioni arrivano in cucina, dove il cuoco le gestisce assieme, usando tutti i fornelli e le pentole a disposizione. Questo è molto diverso dal funzionamento di uno sportello informazioni, dove gli utenti vengono ascoltati e serviti rigorosamente in fila indiana.

Il client è il programma che esegue le richieste, solitamente una per volta, inviando una missiva al server e restando pazientemente in attesa. Nell'esempio del ristorante le applicazioni client sono proprio i clienti seduti al tavolo, che ordinano da mangiare dopo aver consultato il menu.

Un server e tre client

Un server e tre client

Elementi comuni nell'architettura client-server sono:

  • Un server è solitamente in grado di gestire molti client diversi
  • Il client spesso deve autenticarsi per poter accedere al server
  • Il client prende l'iniziativa di ogni scambio di informazioni, mandando una richiesta al server
  • Il server si occupa di salvare in modo permanente le informazioni inviate dal client

Esistono alcune eccezioni alle regole qui sopra, ma esse sono rispettate nella grande maggioranza delle applicazioni web moderne. L'esempio più comune di questa architettura è il funzionamento di un comune browser. Il browser è un client HTTP, ovvero un'applicazione che sfrutta il protocollo HTTP per richiedere pagine web ad un server remoto. Se manteniamo quest'architettura ma cambiamo il protocollo di comunicazione, lo scenario può mutare drasticamente. Ecco alcuni esempi:

  • Un client HTTPS è un'applicazione che utilizza il protocollo HTTPS per scambiare informazioni “sicure” tra client e server (mediante crittografia)
  • Un client FTP è un'applicazione che sfrutta il protocollo FTP per trasferire file tra il client ed un server remoto
  • Un client SQL è un'applicazione che si collega via TCP/IP (o in altro modo) ad un database server per consultare, modificare o inserire i dati memorizzati nel database
  • Un client DHCP è un computer che vuole collegarsi ad una sottorete, per cui avanza la richiesta di assegnazione di un indirizzo IP ad un server DHCP

I programmi più comuni sono in grado di svolgere la funzione client in modi diversi. Molti browsers permettono sia di “navigare” su internet, svolgendo il ruolo di client HTTP, sia di amministrare i files su un server remoto, mediante un client FTP integrato, sia di scambiare informazioni private e protette, usando il protocollo HTTPS. Ecco perché la parola applicazione è riferita ad un programma, mentre col termine client si precisa il ruolo svolto dall'applicazione. Un'applicazione può infatti fare da client in molti modi diversi, usando differenti protocolli, come nel caso del browser.

Diremo di più: sul web la maggior parte dei calcolatori svolge entrambe le funzioni contemporaneamente, ovvero fa sia da client che da server, a seconda dell'esigenza. La trasmissione di un messaggio su internet assomiglia in parte al gioco del passaparola, dove ciascuno ascolta una parola da un compagno di gioco e poi la bisbiglia all'orecchio dell'altro. Quando ascoltiamo una parola facciamo da server (riceviamo una richiesta) e quando la ripetiamo facciamo da client (inoltriamo una richiesta).

Catena di client e server

Catena di client e server

Lo schema qui sopra mostra, in forma esemplificata, quali sono i passaggi e i ruoli interessati durante la comunicazione di informazioni sul web. Lo scenario descrive abbastanza bene quello che succede quando utilizziamo una web mail, un social network o un altro servizio web che richieda la nostra autenticazione. Vediamo un caso d'uso esemplare:

  1. L'utente apre il browser e chiede di accedere alla sua casella di posta elettronica mediante web mail. Il browser svolge il ruolo di client HTTPS inviando una richiesta sul web, nella quale l'utente ha inserito username e password
  2. Un web server svolge il ruolo di server HTTPS accettando la richiesta del browser. Esso è detto anche front end, perché si occupa di accettare la richiesta senza elaborarla, ed eventualmente inoltrarla a chi di dovere
  3. Il front end inoltra la richiesta all'application server, dove avviene la vera e propria elaborazione della richiesta. Adesso tocca quindi al front end fare da client HTTP, mentre l'application server svolge il ruolo di server HTTP.
  4. Sull'application server si trova il software che si occupa di capire se l'utente va autentificato, e come e dove verificare l'identità dell'utente. Spesso questo implica la necessità di consultare un database server, detto anche back end. In questo caso l'application server fa da client SQL, mentre il back end fa da server SQL.

L'esempio mostra come tutti gli attori partecipanti al processo di trasmissione fanno, a turno, sia da server che da client. Questo dovrebbe chiarire perché, nelle applicazione pratiche, i termini server e client non identificano in modo univoco programmi o calcolatori, ma piuttosto denotano la funzione svolta dal programma durante il processo di trasmissione di un'informazione. E' altrettanto vero che se una macchina è predisposta ad ospitare esclusivamente applicazioni server, è consuetudine usare il termine server anche per identificare la macchina stessa. Dopotutto, se ripensiamo all'esempio del ristorante, è lecito supporre che anche un cuoco andrà a cena fuori, di tanto in tanto, indossando i panni del cliente, ma nonostante questo ci verrà spontaneo dire che è sempre un cuoco, anche quando non si trova dietro ad un fornello.