Chiarimento dell'intestazione Keep-Alive


106

Mi è stato chiesto di creare un sito e uno dei co-sviluppatori mi ha detto che avrei dovuto includere l'intestazione keep-alive.

Beh, ho letto molto a riguardo e ho ancora domande.

msdn ->

La connessione aperta migliora le prestazioni quando un client effettua più richieste per il contenuto della pagina Web, poiché il server può restituire il contenuto per ciascuna richiesta più rapidamente. In caso contrario, il server deve aprire una nuova connessione per ogni richiesta

Guardando

inserisci qui la descrizione dell'immagine

  • When The IIS (F) manda keep aliveun colpo di testa ( o utente invia keep-alive ), significa che ( E, C, B) Salva una connessione che è solo per la mia sessione?
  • Dove vengono conservate queste informazioni ( "questa connessione appartiene a" Royi " )?
  • Significa che nessun altro può usare quella connessione
  • In caso affermativo, significa che mantenere vivo l'intestazione ridurre il numero di utenti di connessione sovrapposti?
  • in caso affermativo, per quanto tempo mi viene salvata la connessione? (in altre parole, se imposto mantieni vivo- "mantieni" fino a quando?)

ps per chi fosse interessato:

facendo clic su questa pagina di esempio verrà restituita l'intestazione Keep Alive


2
Pfff, l'ho visto in una conferenza, ma non ne sono del tutto sicuro. Pensavo che il keep-alive fosse solo sul server e sull'utente. Dopotutto, tutto ciò che c'è nel mezzo non dovrebbe nemmeno sapere che è HTTP, figuriamoci guardare le intestazioni.
Noctua

La dichiarazione citata da MSDN è sciocca. È il client che deve aprire una nuova connessione se non c'è keep-alive.
Marchese di Lorne

E se stai creando un sito, non un server Web o un client, l'intestazione keepalive è già pronta per te.
Marchese di Lorne

Risposte:


145

Dove vengono conservate queste informazioni ("questa connessione è tra computer Ae server F")?

Una connessione TCP viene riconosciuta dall'IP e dalla porta di origine e dall'IP e dalla porta di destinazione. Il tuo sistema operativo, tutti i dispositivi sensibili alla sessione intermedi e il sistema operativo del server riconosceranno la connessione da questo.

HTTP funziona con richiesta-risposta: il client si connette al server, esegue una richiesta e riceve una risposta. Senza keep-alive, la connessione a un server HTTP viene chiusa dopo ogni risposta. Con HTTP keep-alive mantieni aperta la connessione TCP sottostante fino a quando non vengono soddisfatti determinati criteri.

Ciò consente più coppie richiesta-risposta su una singola connessione TCP, eliminando alcune delle connessioni relativamente lente di TCP.

Quando IIS (F) invia l'intestazione keep alive (o l'utente invia keep-alive), significa che (E, C, B) salva una connessione

No. I router non hanno bisogno di ricordare le sessioni. In effetti, non è necessario che più pacchetti TCP appartenenti alla stessa sessione TCP passino tutti attraverso gli stessi router, ovvero perché TCP possa gestirli. I router scelgono semplicemente il percorso IP migliore e inoltrano i pacchetti. Keep-Alive è solo per client, server e altri dispositivi intermedi in grado di riconoscere la sessione.

che è solo per la mia sessione?

Significa che nessun altro può usare quella connessione

Questa è l' intenzione delle connessioni TCP : è una connessione end-to-end destinata solo a queste due parti.

In caso affermativo, significa che mantenere vivo l'intestazione ridurre il numero di utenti di connessione sovrapposti?

Definisci "connessioni sovrapposte". Vedi connessione persistente HTTP per alcuni vantaggi e svantaggi, come:

  • Riduzione dell'utilizzo di CPU e memoria (perché meno connessioni aperte contemporaneamente).
  • Abilita il pipeline HTTP di richieste e risposte.
  • Ridotta congestione di rete (meno connessioni TCP).
  • Latenza ridotta nelle richieste successive (senza handshaking).

in caso affermativo, per quanto tempo mi viene salvata la connessione? (in altre parole, se imposto mantieni vivo- "mantieni" fino a quando?)

Una tipica risposta keep-alive è simile a questa:

Keep-Alive: timeout=15, max=100

Vedere ad esempio l' intestazione Keep-Alive del protocollo HTTP (Hypertext Transfer Protocol) (una bozza per HTTP / 2 in cui l'intestazione keep-alive è spiegata in maggiore dettaglio rispetto a 2616 e 2086 ):

  • Un host imposta il valore del timeoutparametro sul tempo in cui l'host consentirà a una connessione inattiva di rimanere aperta prima che venga chiusa. Una connessione è inattiva se nessun dato viene inviato o ricevuto da un host.

  • Il maxparametro indica il numero massimo di richieste che un client effettuerà o che un server consentirà di effettuare sulla connessione persistente. Una volta inviato il numero specificato di richieste e risposte, l'host che includeva il parametro potrebbe chiudere la connessione.

Tuttavia, il server è libero di chiudere la connessione dopo un tempo o un numero arbitrario di richieste (purché restituisca la risposta alla richiesta corrente). La modalità di implementazione dipende dal tuo server HTTP.


Definisci "connessioni sovrapposte" ----> Intendo simultaneamente. (e penso che il numero di connessioni simultanee sarà ridotto perché come hai detto: "la connessione X è riservata a John perché usa l'intestazione keep-alive." .... ho ragione?
Royi Namir

1
Quindi quello che stai dicendo è che se il server può gestire 100 connessioni alla volta, e tutte quelle connessioni usano keep-alive, allora la 101a connessione verrà scaricata ???
Royi Namir

1
@Royi no, non so quante connessioni keep-alive fa un browser a un dato host e non volevo dire che un browser ne aprirà solo uno. Il numero di richieste effettuate contemporaneamente è limitato e varia a seconda del browser . Volevo dire che se un browser utilizza connessioni keep-alive, potrebbe invece di attivare Nrichieste sulle Nconnessioni (poiché per impostazione predefinita la connessione viene chiusa dopo ogni risposta), ad esempio Nrichieste di fuoco su N / Mo anche solo Mconnessioni, perché può attivare più richieste su ogni connessione aperta, quindi puoi usarne meno.
CodeCaster

1
Lo so. (:-)) hai detto nel tuo commento: un client effettuerà meno connessioni simultanee quando usa keep-alive, attiverà le richieste in seriale, non in parallelo . Non capisco come si relaziona a keepalive.
Royi Namir

5
E, C, B non salvano le sessioni. Questi sono router, non hanno alcuna tabella di sessione e non ne hanno bisogno, perché più pacchetti da una stessa sessione TCP da client a server possono seguire percorsi diversi. Il ruolo del router è scegliere il percorso IP migliore e inoltrare il pacchetto di conseguenza, in modo che non salga al livello di trasporto (TCP / UDP), né al livello dell'applicazione per vedere l'intestazione keep-alive. Quindi fondamentalmente keep-alive è esplicitamente tra il client e il server, e implicitamente consente ai dispositivi sensibili alla sessione, ad esempio i firewall, di aprirsi a quella sessione esplicita da client a server
Amine Kadimi
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.