2012-02-17 28 views
27

In che modo è implementato HTTP Keep Alive? Utilizza internamente TCP Keep Alive? In caso contrario, come rileva il server se il client è vivo o morto?HTTP Keep Alive e TCP keep alive

risposta

15

HTTP Keep-Alive è una funzionalità del protocollo HTTP. Il server Web, che implementa la funzione Keep-Alive, deve verificare periodicamente la connessione/socket (per la richiesta HTTP in entrata) per l'intervallo di tempo dal momento in cui ha inviato l'ultima risposta HTTP (nel caso in cui vi fosse una richiesta HTTP corrispondente). Se non viene ricevuta alcuna richiesta HTTP al momento del tempo di keep-alive configurato (secondi), il server Web chiude la connessione. Nessuna ulteriore richiesta HTTP sarà possibile dopo la "chiusura" eseguita da Web Server. D'altra parte, TCP Keep-Alive è gestito dal sistema operativo nel livello TCP. HTTP Keep-Alive e TCP Keep-Alive sono cose totalmente indipendenti.

36

So che questa è una vecchia questione, ma ancora:

  • HTTP keep-alive è una funzione che consente client HTTP (solitamente browser) e il server (server web) per inviare più coppie richiesta/risposta sopra la stessa connessione TCP. Questo diminuisce la latenza per la 2a, 3a, ... richiesta HTTP, diminuisce il traffico di rete e simili.

  • TCP keepalive è una bestia completamente diversa. Mantiene aperta la connessione TCP inviando piccoli pacchetti. Inoltre, quando il pacchetto viene inviato questo serve come controllo in modo che il mittente venga avvisato non appena la connessione si interrompe (nota che questo NON è il caso altrimenti - finché non proviamo a comunicare attraverso la connessione TCP non abbiamo idea se sia ok o no).

per rispondere alle vostre domande su HTTP keep-alive:

How is HTTP Keep Alive implemented? 

Per dirla semplicemente, il server HTTP non chiude la connessione TCP dopo ogni risposta, ma aspetta un po 'di tempo se qualche altro HTTP verrà richiesta anche la richiesta. Dopo un certo timeout lo chiude comunque.

Does it internally use TCP Keep Alive? 

No, almeno non vedo alcun punto in esso.

If not, how does the server detect if the client is dead or alive? 

Non - non è necessario. Se un cliente invia una richiesta, riceverà la risposta. Se il client non invia nulla tramite la connessione TCP (forse perché la connessione è morta), un timeout chiuderà la connessione; il cliente ovviamente lo noterà e invierà la richiesta tramite un'altra connessione TCP, se necessario.

-2

http keep-alive sta solo facendo in modo che tcp viva più a lungo per trasferire la richiesta multi http. Dopo il timeout keep-alive, la connessione TCP sarà chiusa. tcp keep-alive è solo un meccanismo che mantiene la connessione TCP o verifica che la connessione TCP non sia chiusa

Problemi correlati