Les navigateurs créent-ils de nouvelles connexions TCP pour chaque requête HTTP?


23

Je sais donc que HTTP n'est en fait qu'un protocole de texte sur TCP, et que TCP est basé sur l'état / la connexion. Cela signifie que le navigateur doit se connecter via TCP à un serveur avant de faire une requête HTTP. Question alors: les navigateurs créent-ils généralement une nouvelle connexion TCP pour chaque requête HTTP?

Les navigateurs pourraient simplement ouvrir une requête TCP et la maintenir en vie tant que l'utilisateur navigue toujours sur ce serveur, mais les serveurs devraient alors utiliser une grande quantité de connexions maximales pour gérer cela. Mais là encore, si les navigateurs créent une connexion pour chaque demande, et que l'utilisateur navigue beaucoup sur le même serveur, cela semblerait un gaspillage. Comment ça marche habituellement? Peut-être en utilisant une minuterie?

Réponses:


30

Dans HTTP / 0.9 (plus utilisé), chaque requête utilisait une connexion TCP distincte, et la fin d'une réponse était signalée en fermant la connexion.

Dans HTTP / 1.0, les connexions séparées sont toujours la valeur par défaut officielle. Cependant, un en- Connection: Keep-Alivetête de requête non officiel mais très largement pris en charge peut être utilisé pour demander une connexion persistante si le serveur le prend en charge.

Dans HTTP / 1.1, les connexions persistantes sont devenues la valeur par défaut et l'ancien comportement de demande unique doit être demandé explicitement. En général, plusieurs connexions persistantes (2 à 5) sont utilisées.

(En option, les demandes peuvent être pipelinées , bien que cela se soit avéré difficile à implémenter et crée plus de problèmes qu'il n'en résout (blocage en tête de ligne, etc.), donc personne n'utilise le pipelining HTTP / 1.x.)

HTTP / 2 (alias SPDY ) a été spécialement conçu pour multiplexer de nombreuses requêtes en même temps. Il possède une couche de cadrage / mise en paquets qui permet aux réponses d'arriver dans n'importe quel ordre et même simultanément.

Ressources: article Wikipedia et RFC 2616 section 8.1 .


Un autre article intéressant mentionnant le même developer.mozilla.org/en-US/docs/Web/HTTP/…
Ganesh Satpute

6

Il y a un en-tête "Connection: Keep-Alive". Voir enwiki pour plus de détails.

Vous pouvez utiliser Wireshark pour capturer et analyser les connexions et voir tous les en-têtes.


Pourquoi Wireshark au lieu de Fiddler?
Pacerier

3
Fiddler est 1. Pas un logiciel Open Source; 2. Windows uniquement.
Vi.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.