La richiesta HTTP in questione non è in realtà valida a meno che il browser non stia parlando con un intermediario (proxy).
Il tuo esempio sarebbe un po 'più simile al seguente se il browser stesse parlando direttamente con un server Web:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Ora, per metterlo in prospettiva, considera il modello OSI:
Abbiamo 3 sistemi in azione:
- Un client che esegue il browser
- Un server web che serve il sito
- Un server DNS che conosce l'indirizzo IP del sito
I protocolli coinvolti sono, dal basso verso l'alto (minimo rilevante impostato su OP):
La comunicazione HTTP viene eseguita tramite il protocollo TCP (TCP è in cima al protocollo IP) mentre la comunicazione DNS, in questo caso, viene eseguita tramite il protocollo UDP (UDP è anche in cima al protocollo IP).
Ecco la sequenza di comunicazione in breve:
Il client , che esegue il browser, richiede un record per il server DNS , utilizzando il protocollo UDP.A
www.pippo.it
1.1. Sul client, è il sistema operativo che esegue la parte di risoluzione e risponde al browser --- il browser non parla mai direttamente al server DNS, piuttosto attraverso il sistema operativo invocando gethostbyname () o il più recente getaddrinfo () . In Windows, l'ordine in cui il sistema operativo risolve gli indirizzi è probabile definito da qualcosa di simile a questo , mentre su Linux la precedenza risolvere è definito da/etc/nsswitch.conf
Il server DNS , utilizzando il protocollo UDP, risponde al client con un record / indirizzo IP, se esiste
Il client apre una connessione TCP sulla porta 80 del server Web e scrive il testo seguente:
Richiesta HTTP:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Puoi imitare la stessa cosa facendo qualcosa del genere nella tua console o nel prompt dei comandi:
> telnet www.pippo.it 80
Trying 195.128.235.49...
Connected to www.pippo.it.
Escape character is '^]'.
GET /hello.htm HTTP/1.1
Host: www.pippo.it
seguito da due righe vuote. Se il contenuto richiesto esiste, il server Web lo stamperà sullo schermo. Se c'è un browser dall'altra parte, il testo della risposta viene analizzato dal browser e tutti i tag, collegamenti, script e immagini vengono visualizzati in quella che chiamiamo pagina Web.
In realtà ci sono alcuni dettagli, ad esempio i browser possono memorizzare nella cache gli indirizzi IP se hai già visitato un dominio, in modo che la risoluzione DNS non sia necessaria. Inoltre, i browser moderni potrebbero tentare di eseguire la risoluzione prima di averne effettivamente bisogno ( prefetching DNS ) per accelerare la navigazione.
Inoltre, il tuo computer potrebbe avere record statici in un hosts
file. Se un record corrisponde alla richiesta, la voce statica locale viene utilizzata per prima e nessun server DNS viene mai contattato. Questo è configurabile e non necessariamente vero, ma è l'impostazione predefinita sui sistemi operativi con cui ho familiarità.