Quando inizi a imparare come nomi di dominio, indirizzi IP, server Web e siti Web si adattano e lavorano insieme, a volte può essere un po 'confuso o travolgente. Come è impostato per funzionare in modo così fluido? Il post di domande e risposte di SuperUser di oggi contiene le risposte alle domande di un curioso lettore.
La sessione di domande e risposte di oggi ci viene fornita da SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte guidato dalla community.
Foto per gentile concessione di Rosmarie Voegtli (Flickr).
La domanda
L'utente del lettore SuperUser3407319 desidera sapere se i server Web dispongono di un solo sito Web ciascuno:
In base a ciò che ho capito sul DNS e sul collegamento di un nome di dominio con l'indirizzo IP del server Web in cui è archiviato un sito Web, ciò significa che ciascun server Web può contenere solo un sito Web? Se i server Web contengono più di un sito Web, come viene risolto tutto in modo da poter accedere al sito Web desiderato senza problemi o confusione?
I server Web contengono solo un sito Web ciascuno o ne contengono di più?
La risposta
Collaboratore SuperUser Bob ha la risposta per noi:
Fondamentalmente, il browser include il nome di dominio nella richiesta HTTP in modo che il server Web sappia quale dominio è stato richiesto e può rispondere di conseguenza.
Richieste HTTP
Ecco come avviene la tua tipica richiesta HTTP:
1. L'utente fornisce un URL, nel formato http: // host: port / path.
2. Il browser estrae la parte host (dominio) dell'URL e lo traduce in un indirizzo IP (se necessario) in un processo noto come risoluzione dei nomi. Questa traduzione può avvenire tramite DNS, ma non è necessario (ad esempio, il file hosts locale su sistemi operativi comuni ignora DNS).
3. Il browser apre una connessione TCP alla porta specificata o imposta automaticamente la porta 80 su quell'indirizzo IP.
4. Il browser invia una richiesta HTTP. Per HTTP / 1.1, è simile al seguente:
L'intestazione host è standard e richiesta in HTTP / 1.1. Non è stato specificato nelle specifiche HTTP / 1.0, ma alcuni server lo supportano comunque.
Da qui, il web server ha diverse informazioni che può usare per decidere quale dovrebbe essere la risposta. Si noti che è possibile che un singolo server Web sia associato a più indirizzi IP.
- L'indirizzo IP richiesto, dal socket TCP (è disponibile anche l'indirizzo IP del client, ma questo viene usato raramente e talvolta per bloccare / filtrare)
- La porta richiesta, dal socket TCP
- Il nome host richiesto, come specificato nell'intestazione host dal browser nella richiesta HTTP
- Il percorso richiesto
- Qualsiasi altra intestazione (cookie, ecc.)
Come sembra aver notato, la configurazione di hosting condiviso più comune in questi giorni mette più siti Web su un unico indirizzo IP: combinazione di porte, lasciando solo l'host a distinguere tra siti Web.
Questo è noto come Host virtuale basato sul nome in Apache-land, mentre Nginx li chiama Server Names in Server Blocks e IIS preferisce Virtual Server.
Che dire di HTTPS?
HTTPS è un po 'diverso. Tutto è identico alla creazione della connessione TCP, ma successivamente deve essere stabilito un tunnel TLS crittografato. L'obiettivo è quello di non perdere alcuna informazione sulla richiesta.
Per verificare che il server Web sia effettivamente proprietario di questo dominio, il server Web deve inviare un certificato firmato da una terza parte attendibile. Il browser confronterà quindi questo certificato con il dominio richiesto.
Questo presenta un problema. Come fa il web server a sapere quale certificato host / sito Web inviare se deve farlo prima di ricevere la richiesta HTTP?
Tradizionalmente, questo è stato risolto con un indirizzo IP (o porta) dedicato per ogni sito Web che richiede HTTPS. Ovviamente, questo è diventato problematico poiché stiamo esaurendo gli indirizzi IPv4.
Immettere SNI (Indicazione nome server). Il browser ora passa il nome host durante le negoziazioni TLS, quindi il server Web ha queste informazioni abbastanza presto per inviare il certificato corretto. Sul lato server Web, la configurazione è molto simile alla configurazione degli host virtuali HTTP.
Il rovescio della medaglia è che il nome host è ora passato come testo normale prima della crittografia, ed è essenzialmente trapelato informazioni. Questo di solito è considerato un compromesso accettabile, sebbene in ogni caso il nome host sia normalmente esposto in una query DNS.
Cosa succede se si richiede un sito Web solo per indirizzo IP?
Cosa fa il web server quando non sa quale host specifico hai richiesto dipende dall'implementazione e dalla configurazione del server web. In genere, viene specificato un sito Web “predefinito”, “catch-all” o “fallback” che fornirà le risposte a tutte le richieste che non specificano esplicitamente un host.
Questo sito Web predefinito può essere un sito Web indipendente (che spesso mostra un messaggio di errore) oppure può essere uno qualsiasi degli altri siti Web sul server Web a seconda delle preferenze dell'amministratore del server Web.
Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere altre risposte da altri utenti esperti di Stack Exchange? Dai un'occhiata al thread completo di discussione qui.