Iniziamo un percorso particolare, poco codice ma molti concetti importanti che spesso restano in secondo piano. Poi torneremo a Python, ma dovrete avere un po’ di pazienza.

Per molti oggi Web è sinonimo di Internet, ma non è affatto così. Internet è basata su un protocollo noto come TCP/IP. Un insieme di regole che consente di creare reti molto grandi (ma non infinite). Non è poi così importante – per il protocollo – se tali reti sono locali o geografiche. Ciò che conta è che su questa infrastruttura sia possibile far girare dei servizi. Se vi viene più congeniale potete far riferimento alla rete telefonica. Così come voi siete identificati da un numero telefonico così in una rete TCP/IP siamo identificati da un indirizzo IP. Attraverso un numero di telefono potete telefonare, inviare un SMS o, un tempo, inviare un fax. Attraverso un indirizzo IP potete accedere a un sito web, inviare un’email, fare un bonifico dall’app sullo smartphone o molto altro. Il sistema di indirizzamento originale può raggiungere più di quattro miliardi di terminali (IPv4), più di recente si è introdotto un indirizzario più sofisticato noto come IPv6, che mette a disposizione miliardi di indirizzi per ogni metro quadrato sulla Terra.

Il Web è soltanto un servizio che gira in questa infrastruttura. Tuttavia ha avuto così successo che per il sentimento comune è diventato sinonimo di Internet, mentre ne è un sottoinsieme. La Posta elettronica, per esempio, è uno dei pochi servizi di uso quotidiano che ha mantenuto un’identità almeno in parte distaccata dal Web. In realtà per funzionare Internet ha bisogno di altri servizi basilari, come DNS, che tuttavia non sono percepiti o quasi dagli utenti. In ogni caso ogni servizio si distingue dagli altri in base alla porta o alle porte di cui ha bisogno. Se la porta è composta da due cifre (per esempio la porta 80) il servizio è molto antico. Se ne occupa tre (per esempio la 453) il servizio è più recente e probabilmente implementa un layer di sicurezza. Le porte con quattro cifre (per esempio la 8080) sono porte personalizzate (custom) spesso riservate alle aree protette della rete locale oppure implementano protocolli per usi specifici (spesso i giochi MMO1 creano i propri).

Nel caso del Web si utilizza un protocollo di comunicazione noto come HTTP (HyperText Transfer Protocol). Dialoga sulla porta 80 che abbiamo già citato. Ma oggi il suo utilizzo è fortemente sconsigliato, quasi tutti i siti web pubblici rispondono sulla versione sicura di HTTP: HTTPS che utilizza la 453.

HTTP nacque per gestire contenuti ipertestuali. Utilizzando un linguaggio di Markup noto come HTML. Utilizzato tutt’oggi, altro non è che la pagina web che state leggendo. O perlomeno la sua ossatura. Ogni risorsa, in un sito web, viene esposta attraverso uno specifico link (url) che di norma potete scrivere (o leggere, magari copiare per condividere) sulle barra del browser.

Se ci colleghiamo per esempio a un social network, ciò che vediamo è personalizzato per il nostro profilo. Il nostro feed non può essere condiviso: serve la nostra autenticazione (e comunque si evolve in tempo reale). Si tratta di una pagina, o di una risorsa, dinamica. Ciò non toglie che un indirizzo tipo https://bsky.app/ ci sarà sempre un feed (il vostro se siete già autenticati). O al più una pagina che invita a iscriverci, salvo rivoluzioni radicali (acquisizioni, cessioni di dominio o rilascio di nuove versioni) non troverete mai un concessionario d’auto o una linea aerea.

Troppe sigle e troppe informazioni? Ecco una tabella riassuntiva. Tutto ciò che riguarda la posta elettronica è stato riportato in quanto è stata citata come servizio ma è qui giusto per rendere intuibile quanto è complessa l’architettura dietro a un semplice messaggio. Aggiungiamo poi con un paio di altri protocolli di esempio.

AcronimoCos’èNomeAliasPorta
TCP/IPprotocolloInternet!
IPindirizzo numericoInternet ProtocolIPv4, IPv6
DNSprotocolloDomain Name System53
POP3protocolloPosta elettronica in ingressoemail110, 995 (sicura)
IMAPprotocollo Posta elettronica in ingressoemail143, 993 (sicura)
SMTPprotocolloPosta elettronica in uscitaemail25, 465 o 587
HTTPprotocolloWeb80, 453 (sicura)
URLindirizzolink
HTMLlinguaggio di markupPagina websito internet
SSHprotocolloterminale sicuroSecure shell22
mysqlservizioMySQLdatabase3306

Distinguiamo tra protocollo e servizio.
Un protocollo è un insieme di regole o comportamenti valido a prescindere dall’implementazione. Client (il programma chiamante) e server (il sistema che eroga un servizio) rispettano queste regole e possono facilmente dialogare tra loro. L’insieme di regole o comportamenti è aperto per definizione, se evolve lo fa in un contesto democratico (o quasi) per esempio per iniziativa di un consorzio.
Un servizio è un software specifico che definisce un protocollo proprio. I client che lo implementano (in tutto o in parte) si rendono compatibili con esso. Una singola azienda (MySQL tra i nostri esempi) si impegna a mantenere coerenti le risposte del server ma può decidere unilateralmente di riscrivere alcuni comportamenti, aggiungerne di nuovi o dismettere vecchie funzionalità. Può farlo anche se il software è FOSS. Non ti va bene o vuoi di più? Fai fork e inventa la tua versione (da MySQL sono nati in questo modo MariaDB e Percona)

Nella prossima pillola smaschereremo un bugiardo!

  1. Massive Multiplayer Online. Giochi strutturati per ospitare un numero molto elevato di giocatori nel medesimo mondo digitale (server). ↩︎