Pagine

sabato 25 gennaio 2025

Strolling through informatics #16 – Data or programs? That is the question

by Enrico Nardelli

(versione italiana qua)

In this final post dedicated to presenting the fundamental concepts of informatics, we begin to address what is perhaps the most significant cultural contribution this discipline has made to our worldview

The concepts of algorithm, language, and automaton, which – together with others – we have explored in the previous posts in this series, are part of a computer scientist's conceptual toolkit and serve as the intellectual tools that a computer scientist uses to model and interpret the world. They can be successfully employed to provide complementary descriptions to those offered by other sciences, to express the informatics perspective on phenomena, thereby enriching our capacity to understand the reality around us.

In post #5 (How to instruct a computer), we presented a simple program written in symbolic language for a very simple register machine (RM). We then commented that such an automaton, in order to actually execute the program, needs it to be translated into machine language. As we explained in the previous post (From virtualization to the cloud), the physical machine level is the only one that can concretely execute programs and needs a language at its level (see the figure in that post).

In the figure below, where instructions are on the left and data on the right, the machine language version of the program presented in post #5 is shown.

Referring to section 4.2.2 of the volume The Informatics Revolution for a detailed explanation of how such a program is obtained from the symbolic language version, here we take it as is because we need it to begin discussing a very important concept in informatics: the dual nature that representation has for the executor.

Indeed, what is written in the memory cells of the RM has no intrinsic characterization as either data or instruction. In the example of a symbolic language program for RM presented in the figure of post #5 (How to instruct a computer), we distinguished the memory area with the program from that with the data for purely educational purposes. In that example, we, as human beings, can distinguish whether what we read in a cell is an instruction or data, but from the machine's own perspective, this distinction doesn't actually exist. Let's consider the second figure from post #4 (How a computer works): in that figure, it says that the RM "reads the instruction at address IC," when in reality the RM is simply reading a sequence of "0s" and "1s" and has no awareness – unlike us humans – that what it's reading is an instruction. Only the action expressed at the bottom of the same figure, "execute instruction read," will assign the actual nature of instruction to that binary sequence.

This becomes clear in the machine language version of the program shown in the figure above. Indeed, in that figure, in the memory cell at address 0 (which contains an instruction) the sequence "0000 00 0001" is written, but also in the memory cells at addresses 15 and 16 (which contain data that the program must process), the same value "0000 00 0001" is written (remember that spaces don't count). Similarly, in cell 6 (instruction) "0000 00 0000" is written, which is the same value written in both cell 10 and 17 (both data).

This observation implies that every piece of data handled by an RM, or by any computer, actually has a dual nature, being able to also be interpreted as an instruction for the machine. This dual nature of data provides informatics with a power of "replication" that was previously possessed only by biological systems. It is precisely this dual nature that serves as the basic conceptual mechanism for constructing computer viruses, which arrive in digital devices as data and then spring into action as programs.

In the next post, we will see a concrete example of such replication capability.

[[The posts in this series are based on the Author's book (in Italian) La rivoluzione informatica: conoscenza, consapevolezza e potere nella società digitale, (= The Informatics Revolution: Knowledge, Awareness and Power in the Digital Society) to which readers are referred for further reading]].

--
The original version (in italian) has been published by "Osservatorio sullo Stato digitale" (= Observatory on Digital State) of IRPA - Istituto di Ricerche sulla Pubblica Amministrazione (= Research Institute on Public Administration) on 22 January 2025.

A passeggio con l'informatica #16 – Dati o programmi? Questo è il problema

di Enrico Nardelli

In questo ultimo post dedicato alla presentazione dei concetti fondamentali dell’informatica iniziamo ad affrontare quello che forse è il contributo più rilevante da un punto di vista culturale apportato da questa disciplina alla visione del mondo.

I concetti di algoritmo, linguaggio, automa, che – insieme agli altri – abbiamo esplorato nei precedenti post di questa serie, fanno parte del bagaglio concettuale di un informatico e sono gli strumenti intellettuali che un informatico usa per modellare e interpretare il mondo. Essi possono essere impiegati con successo per fornire descrizioni complementari a quelle fornite da altre scienze, per esprimere il punto di vista informatico sui fenomeni, arricchendo così la capacità di comprendere la realtà intorno a noi.

Nel post n.5 (Come istruire un computer) avevamo presentato un semplice programma scritto in linguaggio simbolico per una semplicissima macchina a registri (MR). Avevamo poi commentato che tale automa, per poter eseguire effettivamente il programma ha bisogno di una sua traduzione in linguaggio macchina. Come abbiamo infatti spiegato nel precedente post (Dalla virtualizzazione al cloud), il livello della macchina fisica è l’unico che può concretamente eseguire i programmi e ha bisogno di un linguaggio al suo livello (si veda la figura del post).

Nella figura sottostante, dove a sinistra vi sono le istruzioni e a destra i dati, viene presentata la versione in linguaggio macchina del programma presentato nel post n.5.

Rimandando alla sezione 4.2.2 del volume La rivoluzione informatica per una spiegazione di dettaglio di come tale programma viene ottenuto dalla versione in linguaggio simbolico, qui lo prendiamo così com’è perché ci serve per iniziare a discutere un concetto molto rilevante dell’informatica, cioè la natura duale che ha la rappresentazione per l’esecutore.

Infatti, ciò che c’è scritto nelle celle di memoria della MR non ha un’intrinseca caratterizzazione come dato o come istruzione. Nell’esempio di programma in linguaggio simbolico per MR presentato nella figura del post n.5 (Come istruire un computer) abbiamo distinto la zona di memoria con il programma e quella con i dati a solo scopo didattico. In quell’esempio noi, in quanto esseri umani, possiamo distinguere se ciò che leggiamo in una cella è un’istruzione o un dato, ma dal punto di vista della macchina stessa questa distinzione in realtà non esiste.

Consideriamo la seconda figura del post n.4 (Come funziona un computer): in tale figura, c’è scritto che la MR “legge l’istruzione all’indirizzo IC”, quando in realtà la MR sta leggendo semplicemente una sequenza di “0” e “1” e non ha – diversamente da noi esseri umani – alcuna consapevolezza che ciò che legge sia un’istruzione. Soltanto l’azione espressa in basso nella stessa figura, “esegui istruzione letta”, assegnerà l’effettiva natura di istruzione a quella sequenza binaria.

Ciò si capisce bene nella versione in linguaggio macchina del programma mostrato nella figura qua sopra. Infatti, in tale figura, nella cella di memoria di indirizzo 0 (che contiene un’istruzione) c’è scritta la sequenza “0000 00 0001”, ma anche nelle celle di memoria di indirizzo 15 e 16 (che contengono dati che il programma deve elaborare), c’è scritto lo stesso valore “0000 00 0001” (ricordate che gli spazi non contano). Nello stesso modo, nella cella 6 (istruzione) c’è scritto “0000 00 0000”, che è lo stesso valore scritto sia nella cella 10 che 17 (entrambi dati).

Questa osservazione implica che ogni dato gestito da una MR, o da qualunque calcolatore, ha in realtà una natura duale, potendo essere interpretato anche come un’istruzione per la macchina. Questa natura duale del dato fornisce all’informatica un potere di “riproduzione” che in precedenza era posseduto solo da sistemi biologici. È proprio questa natura duale il meccanismo concettuale di base per la costruzione dei virus informatici, che arrivano nei dispositivi digitali come dati e poi entrano in azione come programmi.

Nel prossimo post vedremo un esempio concreto di tale capacità di riproduzione.

--
Versione originale pubblicata da "Osservatorio sullo Stato digitale" dell'IRPA - Istituto di Ricerche sulla Pubblica Amministrazione il 22 gennaio 2025.

sabato 18 gennaio 2025

Strolling through informatics #15 – From virtualization to the cloud

by Enrico Nardelli

(versione italiana qua)

In post #5 of this stroll through informatics (How to instruct a computer) we had seen how to provide a computer with the instructions it must execute. In that post we had presented a very simple example of a program with instructions written in a programming language at the symbolic level (briefly, symbolic language), clarifying that actual execution by an automaton instead requires instructions expressed in a programming language at the machine level (that is, machine language).

From a conceptual point of view, we can consider the computer "as if" it were able to directly execute the program in symbolic language. This view of the computer therefore considers it as a virtual machine capable of directly executing the instructions of the symbolic language. Since it isn't, to achieve this behavior, a translation of the program from symbolic language to machine language must be performed.

The translation can occur in two ways, called compilation and interpretation. The difference between the two is that with compilation the symbolic-level program is entirely translated to machine level and its execution occurs after the entire translation process has finished. With interpretation, instead, the same program is translated one instruction at a time, which is immediately executed by the physical machine. In some cases compilation is preferable, in others interpretation: both approaches are widely used. It's the same difference that exists between a book translator, who delivers the entire translated volume to you (compilation) and a simultaneous interpreter, who instead performs the translation of each spoken sentence one at a time (interpretation).

If you reconsider post n.5, however, you realize that even that symbolic language was somewhat convoluted, with terms that weren't too clear (e.g., X Dim or Go Y to indicate an instruction that checks the content of cell X and then either decrements it or prepares the machine to continue with the instruction in cell Y). It would therefore be nice to be able to have a high-level symbolic language, with instructions almost close to common sense and apply the same translation mechanism. In this case, the computer would be considered as a virtual machine capable of directly executing programs written in a high-level symbolic language, while in reality everything would go through a translation process as previously explained.

This conceptual view of nested boxes (or Russian dolls) is illustrated, for the situation just described, in the figure below.

At the lowest level there is the physical machine, that is the level of electronic circuits, which are capable of physically executing logical and arithmetic operations. When moving from this level to that of a machine capable of executing instructions in symbolic language, an abstraction process is performed, that is, one disregards what is physically available, instead imagining having something more powerful, namely a computer capable of directly executing instructions in symbolic language.

The symbolic machine thus defined doesn't have to be physically realized because it is virtually obtained through the process of translating instructions in symbolic language into those of machine language, which are then executed by the physical machine.

This approach is also called virtualization, precisely because it allows having the symbolic machine available not through its actual physical construction, but through its emulation by a physical machine, appropriately instructed to produce the results requested from the symbolic machine.

In the reality of informatics, exactly something similar happens, extending this virtualization mechanism even further, as described in greater detail in the volume The Informatics Revolution.

It's useful to remember that when computers were born, in the first half of the 20th century, only the physical level was available, that of electronic circuits. Right from the start, however, computer scientists understood that the conceptual power of an automatic executor could be employed to mechanize the translation process from human expression of the solution procedure to one capable of being executed by the physical machine. Besides allowing people to operate at the mental level most suited to them, this way both the errors that inevitably occur in the translation process and those deriving from not expressing oneself with the most appropriate tool were avoided.

Starting from the second decade of the 21st century, virtualization, which as we just said has been part of informatics since its birth, has taken on an increasingly important role. In fact, the widespread availability of a high-speed Internet network has made it more convenient, in a whole series of circumstances, not to directly buy physical machines, that is computers – as they say in the field – made of "iron," which must also be managed from a physical point of view (protection, space, air conditioning, maintenance, ...), but to rent virtual machines available somewhere on the Internet, precisely in the cloud, that is "in the cloud" (a term that derives from the fact that in enterprise-level description schemes of information systems the communication network part was conventionally represented by a little cloud).

I close this section by remembering that the same virtualization mechanism that enabled the development of the cloud allows us to "revive" computer models that are now out of production or that are no longer able to function physically, allowing their emulators, that is virtual machines that rely on functioning machines, to execute software that still exists for them but is no longer capable of being executed either by such models or directly by modern machines.

[[The posts in this series are based on the Author's book (in Italian) La rivoluzione informatica: conoscenza, consapevolezza e potere nella società digitale, (= The Informatics Revolution: Knowledge, Awareness and Power in the Digital Society) to which readers are referred for further reading]].

--
The original version (in italian) has been published by "Osservatorio sullo Stato digitale" (= Observatory on Digital State) of IRPA - Istituto di Ricerche sulla Pubblica Amministrazione (= Research Institute on Public Administration) on 15 January 2025.

A passeggio con l'informatica #15 – Dalla virtualizzazione al cloud

di Enrico Nardelli

Nella tappa n.5 di questa passeggiata con l’informatica (Come istruire un computer) avevamo visto come fornire a un computer le istruzioni che esso deve eseguire. In quel post avevamo presentato un semplicissimo esempio di programma con istruzioni scritte in un linguaggio di programmazione a livello simbolico (brevemente, linguaggio simbolico), chiarendo che l’effettiva esecuzione da parte di un automa richiede invece istruzioni espresse in linguaggio di programmazione a livello macchina (cioè, linguaggio macchina).

Da un punto di vista concettuale possiamo considerare il computer “come se” fosse in grado di eseguire direttamente il programma in linguaggio simbolico. Questa visione del computer lo considera quindi come una macchina virtuale in grado di eseguire direttamente le istruzioni del linguaggio simbolico. Poiché non lo è, per poter realizzare questo comportamento, deve essere fatta una traduzione del programma dal linguaggio simbolico a quello macchina.

La traduzione può avvenire in due modi, detti compilazione e interpretazione. La differenza tra i due è che con la compilazione il programma di livello simbolico viene interamente tradotto in quello di livello macchina e la sua esecuzione avviene dopo che l’intero processo di traduzione è terminato. Con l’interpretazione, invece, lo stesso programma viene tradotto un’istruzione per volta, che viene subito eseguita dalla macchina fisica. In alcuni casi è preferibile la compilazione, in altri l’interpretazione: entrambi gli approcci sono largamente usati. Si tratta della stessa differenza che c’è tra il traduttore di un libro, che vi consegna l’intero volume tradotto (compilazione) e l’interprete simultaneo, che invece esegue volta per volta la traduzione della frase pronunciata (interpretazione).

Se riprendete in considerazione la tappa n.5 vi rendete conto, però, che anche quel linguaggio simbolico era un po’ involuto, con termini non troppo chiarissimi (p.es., X Dim o Vai Y per indicare un’istruzione che verifica il contenuto della cella X e poi o lo decrementa o predispone la macchina per continuare con l’istruzione nella cella Y). Sarebbe bello quindi poter avere un linguaggio simbolico di alto livello, con istruzioni quasi vicine al senso comune e applicare lo stesso meccanismo di traduzione. In questo caso, il computer verrebbe considerato come una macchina virtuale in grado di eseguire direttamente programmi scritti in un linguaggio simbolico di alto livello, mentre in realtà il tutto passerebbe attraverso un processo di traduzione come precedentemente spiegato.

Questa visione concettuale di scatole cinesi (o di bamboline russe) viene illustrata, per la situazione appena descritta, nella figura sottostante.

Al livello più basso c’è la macchina fisica, cioè il livello dei circuiti elettronici, che sono in grado di eseguire fisicamente le operazioni logiche e aritmetiche. Quando si passa da questo livello a quello della macchina in grado di eseguire le istruzioni del linguaggio simbolico, si compie un processo di astrazione, si prescinde cioè da ciò che si ha fisicamente a disposizione, immaginando invece di avere qualcosa di più potente, cioè un calcolatore in grado di eseguire direttamente le istruzioni del linguaggio simbolico.

La macchina simbolica così definita non deve però essere fisicamente realizzata perché viene virtualmente ottenuta con il processo di traduzione delle istruzioni in linguaggio simbolico in quelle del linguaggio macchina, che vengono poi eseguite dalla macchina fisica.

Questo approccio viene anche chiamato virtualizzazione, proprio perché consente di avere a disposizione la macchina simbolica non mediante la sua effettiva costruzione fisica, ma attraverso la sua emulazione da parte di una macchina fisica, opportunamente istruita affinché produca i risultati che si sono chiesti alla macchina simbolica.

Nella realtà dell’informatica accade esattamente qualcosa di simile, estendendo ulteriormente questo meccanismo di virtualizzazione, come descritto in maggior dettaglio nel volume La rivoluzione informatica.

È utile ricordare che quando i calcolatori sono nati, nella prima metà del XX secolo, era disponibile solo il livello fisico, quello dei circuiti elettronici. Da subito, però, gli informatici hanno capito che la potenza concettuale di un esecutore automatico poteva essere impiegata per meccanizzare il processo di traduzione dall’espressione umana della procedura risolutiva a quella in grado di essere eseguita dalla macchina fisica. Oltre a consentire alle persone di operare al livello mentale più adeguato a loro, si evitavano in questo modo sia gli errori in cui fatalmente si incorre nel processo di traduzione sia quelli derivanti dal non esprimersi con lo strumento più adatto.

A partire dal secondo decennio del XXI secolo la virtualizzazione, che come abbiamo appena detto fa parte dell’informatica sin dalla sua nascita, ha assunto un ruolo sempre più importante. Infatti, la disponibilità capillare di una rete Internet ad alta velocità ha reso più conveniente, in tutta una serie di circostanze, non comprare direttamente macchine fisiche, cioè calcolatori – come si dice nell’ambiente – “di ferro”, che devono essere gestiti anche da un punto di vista fisico (protezione, spazio, climatizzazione, manutenzione, …), ma noleggiare macchine virtuali disponibili da qualche parte su Internet, appunto in the cloud, cioè “nella nuvola” (termine che deriva dal fatto che negli schemi di descrizione a livello aziendale dei sistemi informatici la parte della rete di comunicazione veniva convenzionalmente rappresentata da una nuvoletta).

Chiudo questa sezione ricordando che lo stesso meccanismo di virtualizzazione che ha permesso lo sviluppo del cloud ci consente di “far rivivere” modelli di calcolatori ormai fuori commercio o che non sono più in grado di funzionare fisicamente, consentendo a loro emulatori, cioè macchine virtuali che si appoggiano su macchine funzionanti, di eseguire il software che ancora esiste per essi ma che non è più in grado di essere eseguito né da tali modelli né direttamente dalle macchine moderne.

--
Versione originale pubblicata da "Osservatorio sullo Stato digitale" dell'IRPA - Istituto di Ricerche sulla Pubblica Amministrazione il 15 gennaio 2025.

sabato 11 gennaio 2025

Strolling through informatics #14 – The etiquette of automata communication

by Enrico Nardelli

(versione italiana qua)

With this post we conclude the section dedicated to discussing the main elements of the processing scenario realized through the participation of multiple agents, now extremely relevant due to the ubiquity of the Internet, and called distributed computing. After the introductory post on this topic, we have addressed the three fundamental concepts of cooperation, synchronization and consensus. This closing post addresses a more technological but equally relevant aspect: communication protocols.

Under this name are included all the rules that define how two executors coordinate to exchange information. Since they are not flesh-and-blood people who, if they speak the same language and belong to the same social community, have learned throughout their life experience the rules for interacting with others, they must be instructed down to the last detail.

In a sense, communication protocols are like the various conversation etiquettes that exist in different social environments. In the world of royal courts, very widespread at the European level in the 18th century, it was expected, for example, that the king or queen would be the first to address those who were presented to them. During conversation one had to use appropriate terms and, when taking leave, one must not turn one's back. When our children are small we teach them to greet when entering an environment where there are other people and not to interrupt adults when they speak (or, at least, to do so in appropriate ways).

The communication protocols of informatics automata conceptually serve the same function and have played a fundamental role since the dawn of this technology.

They are basically made up of two parts. The first is a set of rules that specify the succession of interaction steps. A trivial example from normal life: first you greet, then you ask how things are going, then you make a specific question, then you give thanks, finally you say goodbye. The second is a set of rules that define the structure of the communications exchanged. Continuing the previous example, one can specify that the greeting be abbreviated and consist only of the greeting term ("ciao" or "hello") or structured with "greeting term" (e.g.: good morning) followed by "title" (e.g. doctor) followed by "full name" (e.g.: Paola Rossi).

Among the most famous modern protocols used in informatics, which even many non-computer scientists have heard of, there are:

  • HypertText Transfer Protocol (HTTP) which is the basis for exchanging web pages;
  • Transmission Control Protocol (TCP) which is one of the fundamental protocols for managing communications on the Internet;
  • Internet Protocol (IP) which is the protocol that allows different communication networks to exchange data to create the Internet we know;
  • File Transfer Protocol (FTP) which constitutes the basic protocol for transferring generic files from one machine to another on the network.

For example, the HTTP protocol provides, as rules specifying interaction, that whoever wants to receive a web page sends a request to the machine that owns it (neglecting the details of how this request is sent) and that such machine responds with the page or an error message. Regarding the structure of the communications exchanged, both the request and the response have a textual format, that is, they are represented through ASCII encoding (we talked about this in the post on data representation).

The request must have, simplifying, the following structure:

  • a request method (chosen from a predefined list),
  • a page address (the precise term is "uniform resource identifier" = URI),
  • the protocol version indicator,
  • any additional information (these are the request headers),
  • a message body (which can be empty).

The response must have the following format:

  • a status line, which contains a 3-digit code that characterizes the success of the response or an error condition (the famous "404 code," which almost everyone will have encountered at least once in their Internet browsing experience and which corresponds to the "page not found" situation, describes precisely an error condition) or intermediate situations that we do not address here,
  • additional information related to the type of machine that responds and the type of content returned (these are the response headers),
  • the content of the response (obviously in case of success).

With the next post we will open the treatment of a new theme, that of virtualization, which has always been present in informatics since its beginnings, but which recently has experienced, in the form of cloud technology, an unprecedented explosion.

[[The posts in this series are based on the Author's book (in Italian) La rivoluzione informatica: conoscenza, consapevolezza e potere nella società digitale, (= The Informatics Revolution: Knowledge, Awareness and Power in the Digital Society) to which readers are referred for further reading]].

--
The original version (in italian) has been published by "Osservatorio sullo Stato digitale" (= Observatory on Digital State) of IRPA - Istituto di Ricerche sulla Pubblica Amministrazione (= Research Institute on Public Administration) on 8 January 2025.

A passeggio con l'informatica #14 – Il galateo della comunicazione tra automi

di Enrico Nardelli

Con questa tappa concludiamo la sezione dedicata a discutere i principali elementi dello scenario di elaborazioni realizzate mediante la partecipazione di più agenti, ormai attualissimo a causa dell’ubiquità di Internet, e denominato computazione distribuita. Dopo il post introduttivo a questa tematica, abbiamo affrontato i tre concetti fondamentali della cooperazione, sincronizzazione e consenso. Questo post di chiusura affronta un aspetto più tecnologico ma altrettanto rilevante, quello dei protocolli di comunicazione.

Sotto questo nome sono comprese tutte le regole che definiscono come due o più esecutori si coordinano per scambiare informazioni. Non essendo persone in carne e ossa che, se parlano uno stesso linguaggio e fanno parte di una stessa comunità sociale, hanno appreso nel corso della loro esperienza di vita le regole per interagire con gli altri, devono essere istruiti fino all’ultimo dettaglio.

In un certo senso, i protocolli di comunicazione sono come i vari galatei di conversazione che vi sono nei diversi ambienti sociali. Nel mondo delle corti reali, assai diffuse a livello europeo nel XVIII secolo, era previsto, ad esempio, che fossero il re o la regina a rivolgere per primi la parola a chi veniva presentato. Durante la conversazione bisognava usare i termini appropriati e, nel congedarsi, non bisognava girare le spalle. Quando i nostri figli sono piccoli gli insegniamo a salutare quando si entra in un ambiente dove vi sono altre persone e a non interrompere gli adulti quando parlano (o, almeno, a farlo con modi opportuni).

I protocolli di comunicazione degli automi dell’informatica svolgono concettualmente la stessa funzione e hanno avuto un ruolo fondamentale fin dagli albori di questa tecnologia.

Sono sostanzialmente fatti di due parti. La prima è un insieme di regole che specificano la successione dei passi di interazione. Un esempio banale della vita normale: prima si saluta, poi si chiede come va, poi si fa una specifica domanda, poi si ringrazia, infine si saluta. La seconda è un insieme di regole che definiscono la struttura delle comunicazioni scambiate. Continuando l’esempio di prima, si può specificare che il saluto sia abbreviato e costituito solo dal termine di saluto (“ciao” oppure “salve”) o strutturato con “termine di saluto” (p.es: buongiorno) seguito dal “titolo” (p.es. dottoressa) seguito dal “nome completo” (p.es.: Paola Rossi).

Tra i protocolli moderni più famosi usati nell’informatica, di cui anche molti non informatici hanno sentito parlare, ci sono:

  • HypertText Transfer Protocol (= protocollo per il trasferimento di ipertesti – HTTP) che è alla base dello scambio di pagine web;
  • Transmission Control Protocol (= protocollo per il controllo della trasmissione – TCP) che è uno dei protocolli fondamentali per la gestione delle comunicazioni su Internet;
  • Internet Protocol (= protocollo di Internet – IP) che è il protocollo che consente alle diverse reti di comunicazione di scambiarsi dati per realizzare l’Internet che conosciamo;
  • File Transfer Protocol (= protocollo per il trasferimento di file – FTP) che costituisce il protocollo di base per trasferire file generici da una macchina all’altra sulla rete.

Ad esempio il protocollo HTTP prevede, come regole che specificano l’interazione, che chi voglia ricevere una pagina web invii una richiesta alla macchina che la possiede (trascurando i dettagli di come questa richiesta venga inviata) e che tale macchina risponda con la pagina o un messaggio di errore. Per quanto riguarda la struttura delle comunicazioni scambiate, sia la richiesta che la risposta hanno un formato testuale, cioè sono rappresentate mediante la codifica ASCII (ne abbiamo parlato nel post sulla rappresentazione dei dati).

La richiesta deve avere, semplificando, la seguente struttura:

  • un metodo di richiesta (scelto tra un elenco predefinito),
  • un indirizzo della pagina (il termine preciso è “identificatore univoco di risorsa”, in inglese uniform resource identifier = URI),
  • l’indicatore della versione del protocollo,
  • eventuali informazioni aggiuntive (sono gli header di richiesta = intestazioni della richiesta),
  • un corpo del messaggio (che può essere vuoto).

La risposta deve avere il seguente formato:

  • una riga di stato, che contiene un codice a 3 cifre che caratterizza il successo della risposta o una condizione di errore (il famoso “codice 404”, che quasi tutti avranno incontrato almeno una volta nella loro esperienza di navigazione su Internet e che corrisponde alla situazione di “pagina non trovata”, descrive appunto una condizione di errore) o situazioni intermedie che qui non trattiamo,
  • informazioni aggiuntive relative al tipo di macchina che risponde e al tipo di contenuto restituito (sono gli header di risposta = intestazioni della risposta),
  • il contenuto della risposta (ovviamente in caso di successo).

Con il prossimo post apriremo la trattazione di un nuovo tema, quello della virtualizzazione, che è sempre state presente nell’informatica fin dai suoi albori, ma che recentemente ha conosciuto, sotto la forma della tecnologia del cloud, un’esplosione senza precedenti.

--
Versione originale pubblicata da "Osservatorio sullo Stato digitale" dell'IRPA - Istituto di Ricerche sulla Pubblica Amministrazione l'8 gennaio 2025.