"Ciao, Amico!"

"Ciao Bilaabo!"

"Quale novità mi racconterai oggi?"

"Molte cose. Ma per cominciare, penso che discuteremo di lavorare con una rete e Internet. Interessato?"

"Sì. L'Internet galattico è fantastico."

"Va bene, ma cominciamo con un po' di storia. All'inizio del 21esimo secolo, la situazione era questa..."

"Ogni computer connesso a Internet aveva un numero univoco. Si trattava di un normale numero a 4 byte. Si chiama indirizzo IP."

"Ma gli umani hanno scarsa memoria e fanno fatica a ricordare qualcosa come 2108458776, quindi spesso scrivono ogni byte separatamente."

"Se dividiamo il numero di quattro byte 2108458776 in byte separati, otteniamo 125.172.135.24. Come ricorderete, ogni byte consiste di 8 bit e può contenere numeri da 0 a 255."

"Allora, è così che scriviamo il numero?"

"Sì. È solo più facile (per gli umani) ricordare i numeri a quattro byte quando sono scritti in questo modo."

"Come è successo, la scelta di utilizzare solo 4 byte ha presto giocato loro uno scherzo crudele. Il numero di dispositivi connessi a Internet è cresciuto così rapidamente che presto si sono esauriti".

"Come ci sono riusciti?"

"Hanno fatto quello che di solito fanno gli umani."

"Hanno ideato un nuovo standard per gli indirizzi IP e lo hanno chiamato con orgoglio IPv6".

"A differenza di un normale indirizzo IP (chiamato IPv4) che utilizza 4 byte per formare un numero univoco, il nuovo standard ne utilizza 16."

"Pensaci, gli umani non riuscivano a ricordare 10 cifre in un numero ordinario (come 2108458776), quindi hanno dovuto dividerle in 4 parti, ma poi hanno pensato di usare numeri composti da 16 byte."

"Sì, a volte gli umani sono strani."

"Sì. Gli umani sono umani."

"Detto questo, sono usciti dalla loro situazione."

"Si sono stancati di ricordare i numeri e hanno deciso di sostituirli con le parole".

"Com'è? Potresti farmi un esempio?"

"Certo, web.mail.com , google.com , new.books.amazon.com , …"

"Questo tipo di nome si chiama dominio."

"Affinché questo Internet funzioni correttamente, hanno creato una tabella speciale chiamata Domain Name System (DNS) che memorizza l'indirizzo IP di ciascun nome di dominio."

"Ecco come funziona."

1)  Un utente inserisce un indirizzo in un browser, ad esempio web.mail.com .

2)  Il browser accede al DNS e utilizza il nome di dominio per ottenere l'indirizzo IP.

3)  A questo indirizzo IP viene inviata una richiesta con l'URL richiesto.

"Non sembra molto semplice."

"Ma questo approccio ha diversi vantaggi:"

" 1) Gli esseri umani trovano facile ricordare nomi che possono essere verbalizzati."

" 2) I nomi di dominio possono essere costruiti gerarchicamente aggiungendo sottodomini all'inizio di un nome. Esattamente come un nome di pacchetto in Java."

" 3) Se è necessario modificare l'indirizzo IP del server Web, è sufficiente modificare il record DNS e tutto funzionerà come prima: gli utenti non devono ricordare un nuovo indirizzo."

"Il DNS è simile a questo:"

Nome del dominio indirizzo IP
mail.com 128.35.36.189
web.mail.com 145.12.17.13
new.mail.com 192.155.15.3
google.com 92.117.151.100
google.com 193.168.0.1
docs.google.com 217.12.222.1

"Ha senso."

"Comunque, un dominio è il nome di un computer, ma non abbiamo bisogno del computer: abbiamo bisogno di ciò che c'è sul computer. Ecco a cosa servono gli URL."

"Inizialmente, un URL era in realtà un collegamento a un file su un altro computer. Ad esempio:"

Esempio
http://info.codegym.cc/user/info/profile.html _ _ _ _
Descrizione
http  è il protocollo per la comunicazione client-server
info.codegym.cc  è il nome di dominio del computer
user/info/profile.html  è il percorso del file sul computer

"All'inizio dello sviluppo della rete, un server Web era in grado di utilizzare un URL solo per servire i file che stava archiviando da qualche parte. L'URL era in realtà un percorso globale del file: nome computer + percorso."

"Successivamente, quando i server Web hanno iniziato a generare file da soli, gli URL sono leggermente cambiati e sono diventati una richiesta al server Web. Sono stati aggiunti anche i parametri di richiesta."

"Oggi è raro vedere un'estensione di file alla fine di un URL. "Un URL moderno è solo un collegamento univoco con parametri. Più simile a una chiamata di metodo piuttosto che a un percorso di file globale."

"Un URL moderno classico ha questo aspetto:"

Analisi dell'URL
http://codegym.cc/alpha/api/contacts ? _ _ _ _ userid=13&filter=none&page=3
Descrizione di parti dell'URL
codegym.cc  è il nome di dominio — il nome univoco (indirizzo) di un computer su Internet
http  è il protocollo per la comunicazione client-server
alpha/api/contacts  è la richiesta del server Web o la richiesta di una pagina Web sul server
userid=13 & filter=none & page=3  è una stringa con i parametri della richiesta

"Sì, mi ricordo. Mi hai parlato degli URL di recente."

"E anche sui porti. Hai usato l'esempio di un condominio."

"Sarebbe meglio dirmi cos'è 'http'. Vedo 'protocollo' scritto ovunque, ma non mi è chiaro cosa sia."

"OK. Te lo dirò senza ulteriori indugi."

Indirizzo IP, dominio, URL - 1

" HTTP sta per H yper T ext T rasport P rotocol e serve per il trasferimento di ipertesto."

"Cos'è l'ipertesto?"

"È HTML."

"In parole povere, un protocollo è un insieme di regole per la comunicazione. Descrive le richieste che possono essere inviate a un server Web e in quale formato, oltre a come il server Web dovrebbe rispondere".

"In breve, la situazione è questa. Tra il client e il server vengono inviati normali file di testo o, se preferisci, grossi blocchi di testo " .

"Una richiesta arriva al server e il server fornisce una risposta a ogni richiesta."

"Ecco alcuni esempi di tale richiesta e risposta:"

Richiesta
GET alpha/api/contacts HTTP/1.1
Host: codegym.cc
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
Descrizione
GET – request subtype
alpha/api/contacts – request to the web server
HTTP/1.1 – protocol version – HTTP/1.1
Host: codegym.cc – domain name
User-Agent: Mozilla/5… – unique browser name
Accept: text/html – requested document type: HTML
Connection: close – close the server connection after processing the request.

"La prima riga è la richiesta effettiva. Quelli che seguono sono parametri di richiesta aggiuntivi, noti anche come 'campi di intestazione'."

"Ed ecco un esempio di risposta:"

Risposta
HTTP/1.1 200 OK
Date: Wed, 11 Feb 2009 11:20:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5wm1
Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT
Content-Language: en
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
<html><body><a href="http://ample.com/about.html#contacts">Click here</a></body></html>
HTTP/1.1 200 OK - «200 OK» means everything is okay.
Date: Wed, 11 Feb 2009 - Date on which the request was processed
Server: Apache - Name of the web server
X-Powered-By: PHP - The server uses PHP
Last-Modified: Wed, 11 Feb 2009 - The time of the last update of the requested file
Content-Language: en - The language of the file
Content-Type: text/html; charset=utf-8 – This is an HTML-file with UTF-8 encoding
Content-Length: 1234 - The response is 1234 bytes long
Connection: close - The connection will be closed after the request is handled
<html><body><a href="http://ample - The HTML file itself.

"Voglio attirare la vostra attenzione su due cose:"

"In primo luogo, qualunque cosa tu richieda, sembra una richiesta di file al server. Non importa se il file si trova sul server o se il server lo genera in risposta alla richiesta."

"In secondo luogo, il file stesso viene inviato come parte della risposta HTTP . In altre parole, vediamo alcuni dati aggiuntivi all'inizio della risposta del server, quindi il corpo del file che viene servito. "

"Che interessante! Non sono sicuro di aver capito tutto. Lo rileggerò più tardi."

"Oh, voglio parlarti di un'altra piccola, ma interessante, cosa: i biscotti."

"Cosa sono quelli?"

"Secondo il protocollo HTTP, i cookie sono piccoli pezzi di informazioni che il server invia al client per l'archiviazione sul client. E vengono rispediti al server come parte delle richieste successive. "

"E che senso ha?"

"Supponiamo che un utente acceda alla home page di un sito Web. Il server crea un oggetto sessione sul server per questo utente e un numero di sessione univoco viene inviato al client come cookie. Durante la successiva richiesta dal client al server, questo numero di sessione, insieme ad altri cookie, verrà rispedito al server. Ciò significa che il server può riconoscere l'utente che ha inviato la nuova richiesta."

"Interessante!"

"Sì. Quando scriverai i tuoi servlet, daremo un'occhiata più da vicino a questo argomento. Ma per ora, facciamo una pausa."

"Qualsiasi cosa tu dica."