Un serveur fait la distinction entre deux applications de navigateur accédant simultanément aux mêmes fichiers HTTP grâce à une combinaison de techniques, tournant principalement autour des identifiants client. et gestion des connexions :
1. Adresses IP et ports : Chaque application de navigateur, même sur la même machine, se connecte au serveur à partir d'une combinaison unique d'adresse IP et de numéro de port. L'adresse IP identifie l'emplacement réseau du client et le numéro de port distingue les différentes applications exécutées sur cette machine. Bien que plusieurs instances de navigateur sur la même machine puissent partager la même adresse IP (du point de vue du serveur), des numéros de port différents seront attribués à leurs connexions. Le serveur utilise cette combinaison pour suivre les demandes individuelles.
2. En-têtes HTTP : Les requêtes HTTP incluent des en-têtes contenant des informations sur le client et la requête. Les en-têtes clés utilisés pour l’identification comprennent :
* `User-Agent` : Cet en-tête identifie le navigateur et le système d'exploitation. Bien qu'il ne soit pas parfaitement unique, il permet de distinguer les différents navigateurs ou versions de navigateur.
* `Connexion` : Cet en-tête indique si la connexion doit être maintenue ouverte pour les requêtes ultérieures (connexion persistante) ou fermée après la requête en cours.
* Cookies : Les cookies sont de petits éléments de données stockés sur la machine du client et envoyés à chaque demande ultérieure. Ils permettent au serveur de suivre un utilisateur ou une session spécifique sur plusieurs requêtes. Bien que les cookies puissent être partagés entre les onglets, ils peuvent toujours aider à différencier les utilisateurs si une gestion appropriée des cookies est utilisée.
* En-têtes de requête : D'autres en-têtes peuvent contenir des identifiants uniques attribués par l'application ou le navigateur, améliorant encore l'identification.
3. Gestion des sessions : Pour les applications Web interactives, les serveurs utilisent souvent des sessions. Un identifiant de session (souvent stocké dans un cookie) est attribué à chaque utilisateur lorsqu'il démarre une session. Les requêtes ultérieures du même utilisateur incluent l'ID de session, permettant au serveur de maintenir l'état et d'identifier les interactions de l'utilisateur sur plusieurs requêtes.
4. Suivi des connexions : Le serveur maintient un pool de connexions, gardant une trace des connexions ouvertes de divers clients. Chaque connexion est associée à un identifiant unique (par exemple, un descripteur de socket) qui permet au serveur de traiter les requêtes indépendamment pour chaque connexion.
Essentiellement, le serveur agit comme un standard, recevant des requêtes provenant de différentes sources (instances de navigateur identifiées via IP:port et en-têtes) et les dirigeant de manière appropriée en fonction des informations fournies. Même si plusieurs requêtes arrivent simultanément, le serveur les traite une par une ou simultanément à l'aide de threads ou de processus, en conservant le contexte de chaque requête grâce aux informations fournies dans la requête elle-même et sa connexion associée.
|