Clarification de l'en-tête Keep-Alive

106

On m'a demandé de créer un site, et l'un des co-développeurs m'a dit que je devrais inclure l'en-tête keep-alive.

Eh bien, j'ai lu beaucoup à ce sujet et j'ai encore des questions.

msdn ->

La connexion ouverte améliore les performances lorsqu'un client effectue plusieurs demandes de contenu de page Web, car le serveur peut renvoyer le contenu de chaque demande plus rapidement. Sinon, le serveur doit ouvrir une nouvelle connexion pour chaque demande

Regarder

entrez la description de l'image ici

  • Lorsque IIS (F) envoie en- keep alivetête ( ou l' utilisateur envoie keep-alive ), cela signifie que ( E, C, B) enregistrer une connexion qui est seulement pour ma session?
  • Où ces informations sont-elles conservées ( "cette connexion appartient à" Royi " )?
  • Cela signifie-t-il que personne d'autre ne peut utiliser cette connexion
  • Si tel est le cas - cela signifie-t-il que Keep Alive-header - réduit le nombre d'utilisateurs de connexion superposés?
  • dans l'affirmative, pendant combien de temps la connexion m'est-elle enregistrée? (en d'autres termes, si je mets en vie - "garder" jusqu'à quand?)

ps pour ceux qui sont intéressés:

cliquer sur cette page d'exemple renverra l'en-tête Keep Alive

Royi Namir
la source
2
Pfff, j'ai vu cela dans une conférence, mais je ne suis pas tout à fait sûr. Je pensais que le keep-alive était uniquement sur le serveur et l'utilisateur. Après tout, tout ce qui se trouve entre les deux ne devrait même pas savoir que c'est HTTP, et encore moins regarder les en-têtes.
Noctua
La déclaration citée de MSDN est ridicule. C'est le client qui doit ouvrir une nouvelle connexion s'il n'y a pas de keep-alive.
Marquis of Lorne
Et si vous créez un site, pas un serveur Web ou un client, l'en-tête keepalive est déjà fait pour vous.
Marquis of Lorne

Réponses:

144

Où ces informations sont-elles conservées ("cette connexion est entre l'ordinateur Aet le serveur F")?

Une connexion TCP est reconnue par l'IP source et le port et l'IP et le port de destination. Votre système d'exploitation, tous les périphériques intermédiaires prenant en charge les sessions et le système d'exploitation du serveur reconnaîtront la connexion de cette manière.

HTTP fonctionne avec demande-réponse: le client se connecte au serveur, effectue une demande et obtient une réponse. Sans keep-alive, la connexion à un serveur HTTP est fermée après chaque réponse. Avec HTTP keep-alive, vous gardez la connexion TCP sous-jacente ouverte jusqu'à ce que certains critères soient remplis.

Cela permet plusieurs paires demande-réponse sur une seule connexion TCP, éliminant une partie du démarrage de connexion relativement lent de TCP.

Lorsque IIS (F) envoie un en-tête Keep Alive (ou que l'utilisateur envoie keep-alive), cela signifie-t-il que (E, C, B) enregistre une connexion

Non. Les routeurs n'ont pas besoin de se souvenir des sessions. En fait, plusieurs paquets TCP appartenant à la même session TCP ne doivent pas tous passer par les mêmes routeurs - c'est à TCP à gérer. Les routeurs choisissent simplement le meilleur chemin IP et transfèrent les paquets. Keep-alive est uniquement pour le client, le serveur et tout autre périphérique intermédiaire prenant en charge les sessions.

qui est uniquement pour ma session?

Cela signifie-t-il que personne d'autre ne peut utiliser cette connexion

C'est l' intention des connexions TCP : c'est une connexion de bout en bout destinée uniquement à ces deux parties.

Si tel est le cas - cela signifie-t-il que Keep Alive-header - réduit le nombre d'utilisateurs de connexion superposés?

Définissez «connexions superposées». Voir Connexion persistante HTTP pour certains avantages et inconvénients, tels que:

  • Utilisation moindre du processeur et de la mémoire (car moins de connexions sont ouvertes simultanément).
  • Active le pipelining HTTP des demandes et des réponses.
  • Réduction de la congestion du réseau (moins de connexions TCP).
  • Réduction de la latence dans les requêtes ultérieures (pas de handshaking).

dans l'affirmative, pendant combien de temps la connexion m'est-elle enregistrée? (en d'autres termes, si je mets en vie - "garder" jusqu'à quand?)

Une réponse typique de keep-alive ressemble à ceci:

Keep-Alive: timeout=15, max=100

Voir l'en -tête Keep-Alive du protocole HTTP (Hypertext Transfer Protocol) par exemple (un brouillon pour HTTP / 2 où l'en-tête keep-alive est expliqué plus en détail que 2616 et 2086 ):

  • Un hôte définit la valeur du timeoutparamètre sur la durée pendant laquelle l'hôte permettra à une connexion inactive de rester ouverte avant qu'elle ne soit fermée. Une connexion est inactive si aucune donnée n'est envoyée ou reçue par un hôte.

  • Le maxparamètre indique le nombre maximum de requêtes qu'un client fera ou qu'un serveur autorisera à effectuer sur la connexion persistante. Une fois que le nombre spécifié de demandes et de réponses a été envoyé, l'hôte qui a inclus le paramètre peut fermer la connexion.

Cependant, le serveur est libre de fermer la connexion après un temps ou un nombre de requêtes arbitraires (du moment qu'il renvoie la réponse à la requête en cours). La manière dont cela est implémenté dépend de votre serveur HTTP.

CodeCaster
la source
Définissez "connexions superposées" ----> Je veux dire simultanément. (et je pense que le nombre de connexions simultanées sera réduit car comme vous l'avez dit: "la connexion X est réservée à John car elle utilise un en-tête keep-alive." .... ai-je raison?
Royi Namir
1
Donc ce que vous dites, c'est que si le serveur peut gérer 100 connexions à la fois, et que toutes ces connexions utilisent keep-alive, alors la 101ème connexion sera déchargée ???
Royi Namir
1
@Royi non, je ne sais pas combien de connexions persistantes un navigateur établit avec un hôte donné et je ne voulais pas dire qu'un navigateur n'en ouvrira qu'une. Le nombre de demandes effectuées simultanément est limité et varie selon le navigateur . Je voulais dire que si un navigateur utilise des connexions persistantes, il peut au lieu de déclencher des Ndemandes sur les Nconnexions (car par défaut, la connexion se ferme après chaque réponse), par exemple, déclencher des Ndemandes sur N / Mou même simplement des Mconnexions, car il peut déclencher plusieurs demandes sur chaque connexion ouverte, donc peut utiliser moins.
CodeCaster
1
Je le sais. (:-)) vous avez dit dans votre commentaire: un client fera moins de connexions simultanées lors de l'utilisation de keep-alive, il lancera les requêtes en série, pas en parallèle . Je ne comprends tout simplement pas comment cela se rapporte à keepalive.
Royi Namir
5
E, C, B ne sauvegardent pas les sessions. Ce sont des routeurs, ils n'ont pas de table de session et ils n'en ont pas besoin, car plusieurs paquets d'une même session client-serveur TCP peuvent suivre des chemins différents. Le rôle du routeur est de choisir le meilleur chemin IP et de transmettre le paquet en conséquence, de sorte qu'il ne monte pas à la couche de transport (TCP / UDP), ni à la couche application pour voir l'en-tête keep-alive. Donc, fondamentalement, le maintien en vie est explicitement entre le client et le serveur, et implicitement, il permet aux périphériques sensibles à la session - par exemple les pare-feu - de s'ouvrir à cette session client-serveur explicite
Amine Kadimi