In che modo un server viene avvisato della richiesta HTTP?


8

Ho una conoscenza di base di come funziona HTTP . Comprendo che il client (browser) invia una richiesta e il server risponde alla richiesta. Tuttavia, la cosa che non capisco è come fa un web server a sapere quando il client effettua una richiesta?

Se qualcuno mi chiama il mio telefono squilla e ricevo una notifica. Allo stesso modo in che modo un server web viene informato della richiesta?


2
In che modo questo non è un duplicato 5 anni dopo il lancio di Super User?
Peter Mortensen,

Risposte:


28

Ci sono molti livelli in questo. E, soprattutto, molti di loro sono intercambiabili.

Ad esempio, puoi avere una rete via cavo coassiale, una Ethernet o una rete Wi-Fi a livello fisico. HTTP funziona sopra a tutti questi, ma ognuno di essi ha una gestione leggermente diversa del payload che viene inviato in giro.

HTTP funziona su un altro protocollo, chiamato TCP, che a sua volta funziona più o meno su un altro protocollo, chiamato IP (oggi principalmente in due varianti: IPv4 e IPv6).

Quindi il server HTTP registra un indirizzo IP (come 184.38.45.1, o molto spesso "qualsiasi"), insieme a una porta TCP (che 80è l'impostazione predefinita per HTTP, ma in generale qualsiasi cosa da 1a 65535), con il sistema operativo. Ora, il server HTTP dice al SO di eseguire il ping quando arrivano i dati (o un altro messaggio). Il sistema operativo sa quando ciò accade, perché il driver della scheda di interfaccia di rete lo dice. E il driver della scheda di rete è indicato dalla scheda di rete stessa, che in realtà ha il proprio software per interpretare i segnali elettrici sul cavo di rete (o i segnali wireless nell'aria, ecc., Si ottiene l'idea).

Nota a margine :

Se vuoi sapere di più su come la scheda di rete può avviare la comunicazione con il driver / sistema operativo, potresti voler cercare alcune informazioni di base sugli interrupt di processo - in pratica, qualunque cosa la CPU stia attualmente facendo viene interrotta e il flusso del programma passa a un interrupt routine del gestore - un pezzo di codice estremamente semplice che si occupa di notificare il sistema e quindi restituisce immediatamente il controllo alla cosa originale che stava facendo la CPU. In effetti, potrebbe rispondere a molte domande sul funzionamento interno del sistema operativo e del computer stesso, ad esempio come un sistema operativo può "rubare" la CPU dalle applicazioni in esecuzione e mescolare le risorse della CPU tra diverse applicazioni in esecuzione contemporaneamente, anche se non collaborano.

Ritornare agli Affari:

Nell'analogia manuale del telefono, immagina che il telefono in realtà non squilli. Per sapere se stai tentando una telefonata, dovrai guardare lo schermo periodicamente e controllare. Per semplificare la gestione del server HTTP (poiché esistono già alcuni layer che eseguono tale controllo periodico), puoi effettivamente bloccare il tentativo di controllo.

Quindi, invece di controllare, vedendo che non c'è nulla e ricontrollare, in pratica continui a guardare lo schermo tutto il tempo. Tuttavia, in pratica hai un sistema completamente separato per gestirlo (nel tuo caso, il centro uditivo, che controlla le vibrazioni dell'aria per informazioni utili, l'anello), quindi non richiede effettivamente la tua attenzione (tempo della CPU).

Ciò è ulteriormente migliorato da tecniche che consentono di monitorare più connessioni contemporaneamente (IOCP). Questo si avvicina sempre di più al sistema di suoneria del telefono: hai una stanza con diecimila telefoni, ma ti importa solo di quelli che stanno suonando al momento, gli altri non stanno attirando la tua attenzione.


Attento, "ping" ha un significato totalmente non correlato nella rete. Inoltre, perché nessuno ha menzionato "interruzioni hardware"?
Lie Ryan,

1
@LieRyan Beh, sì, è nella parte in cui la scheda NIC dice al driver della scheda NIC. Sembra solo un piccolo granello nell'enorme elenco di astrazioni che sono coinvolte, e davvero, al di fuori delle persone che giocano con architetture della vecchia scuola, dispositivi integrati o sviluppatori di driver, è una conoscenza piuttosto oscura, purtroppo. Ma bene, suppongo che aggiungerò una breve menzione.
Luaan,

1
Le porte sono solo numeri? o sono pin fisici sulla scheda NIC? Trovo difficile immaginare che potrebbero esserci 65536 porte
Dhiwakar Ravikumar,

2
@DhiwakarRavikumar: Sì, le porte sono solo numeri. Sono costituiti da un programma o dal sistema operativo, non corrispondono a nulla nell'hardware.
sleske,

1
@DhiwakarRavikumar Le porte sono solo numeri, ma gli interrupt di processo erano in realtà pin hardware sulla CPU (quindi avevi un pin diverso per "ottenuto una divisione per zero!" E un altro per "la sveglia suona"). Quindi hai avuto solo tre o sette interruzioni diverse o simili per la maggior parte del tempo. È paragonabile alle vecchie stazioni telefoniche: in realtà avevano pin fisici che dovevi connetterti per effettuare la chiamata, ma al giorno d'oggi sono passati al software proprio come le porte TCP.
Luaan,

9

I computer usano un concetto chiamato "porte", analogo a "interni" per un centralino telefonico: il client non sta solo "chiamando" l'indirizzo IP del server, ma invia anche la richiesta a una porta specifica su quel server.

Esistono migliaia di porte ( elenco di Wikipedia ), ad esempio la porta 80 è l'impostazione predefinita per HTTP.

Il trucco è che un programma, ad esempio un server web, può registrarsi per ascoltare su una determinata porta. Quindi il sistema operativo passerà tutte le richieste in arrivo su quella porta a quel programma.

Il punto di avere più porte è che puoi avere più servizi in esecuzione sullo stesso server contemporaneamente, usando porte diverse che non interferiranno tra loro.


65.535 porte per l'esattezza
ub3rst4r

3

Webserver notificato con il seguente processo

Accept ()
Liseten()
bind()
socket()

Supponiamo che il server web sia in ascolto sulla porta 80, quando la richiesta del client arriva sulla porta 80, accetterà una connessione con la chiamata di sistema accept (). Questa chiamata si blocca in genere fino a quando un client si connette al server.

Quindi ascoltare le connessioni con la chiamata di sistema Listen () e associare il socket a un indirizzo utilizzando la chiamata di sistema bind ().

Atlast crea un socket con la chiamata di sistema socket ().

Spero che sia di aiuto!


0

Hai la directory / var / log / apache2 con la seguente directory:

access.log
error.log
other_vhosts_access.log

È correlato a ciò che desideri dal cliente e alle modalità di notifica, sms, e-mail e così via.

Il mio consiglio:

È possibile creare un server di registro e inviare tutti i registri come server di posta, server DNS, server Web e così via, quindi è possibile analizzarlo, anche lo stesso server utilizza db ed è possibile eseguire query.


Grazie per la risposta, ma penso che tu abbia frainteso la mia domanda. Intendevo quando ricevo una telefonata, il mio telefono squilla. Quindi so di aver ricevuto una telefonata perché il mio telefono ha squillato. Allo stesso modo quando il client effettua una richiesta, come viene notificato il server web?
Raj curioso

0

Immagino che il web server registri le funzioni di richiamata con la porta.

In modo che ogni volta che viene ricevuto qualcosa su quella particolare porta, il sistema richiama la funzione di richiamata registrata in precedenza. All'interno di quella richiamata, potrebbe impostare un evento o qualcosa del genere e quindi il server web avrebbe un thread dedicato in attesa di quell'evento. Questo thread verrà eseguito e accoderà questa richiesta all'elenco principale di richieste che il server web sta già elaborando.

Ciò che ho dato qui è una visione molto superficiale e macro delle cose che accadono. Per risposte più precise aspettiamo che arrivino gli esperti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.