Een server maakt onderscheid tussen twee browserapplicaties die tegelijkertijd toegang hebben tot dezelfde HTTP-bestanden door een combinatie van technieken, die voornamelijk draaien om client-ID's en verbindingsbeheer :
1. IP-adressen en poorten: Elke browsertoepassing, zelfs op dezelfde machine, maakt verbinding met de server via een unieke combinatie van IP-adres en poortnummer. Het IP-adres identificeert de netwerklocatie van de client en het poortnummer onderscheidt verschillende applicaties die op die machine draaien. Hoewel meerdere browserinstanties op dezelfde machine hetzelfde IP-adres kunnen delen (vanuit het perspectief van de server), zullen er verschillende poortnummers aan hun verbindingen worden toegewezen. De server gebruikt deze combinatie om individuele verzoeken bij te houden.
2. HTTP-headers: HTTP-verzoeken omvatten headers die informatie bevatten over de client en het verzoek. Belangrijke headers die voor identificatie worden gebruikt, zijn onder meer:
* `Gebruiker-agent`: Deze header identificeert de browser en het besturingssysteem. Hoewel het niet perfect uniek is, helpt het onderscheid te maken tussen verschillende browsers of browserversies.
* `Verbinding`: Deze header geeft aan of de verbinding open moet blijven voor volgende verzoeken (persistente verbinding) of gesloten moet worden na het huidige verzoek.
* Cookies: Cookies zijn kleine stukjes gegevens die op de machine van de klant worden opgeslagen en bij elk volgend verzoek worden verzonden. Ze stellen de server in staat een specifieke gebruiker of sessie te volgen over meerdere verzoeken heen. Hoewel cookies over verschillende tabbladen kunnen worden gedeeld, kunnen ze nog steeds helpen bij het onderscheiden van gebruikers als het juiste cookiebeheer wordt gebruikt.
* Verzoekkopteksten: Andere headers kunnen unieke identificatiegegevens bevatten die zijn toegewezen door de applicatie of browser, waardoor de identificatie nog verder wordt verbeterd.
3. Sessiebeheer: Voor interactieve webapplicaties maken servers vaak gebruik van sessies. Aan elke gebruiker wordt een sessie-ID (vaak opgeslagen in een cookie) toegewezen wanneer deze een sessie start. Volgende verzoeken van dezelfde gebruiker bevatten de sessie-ID, waardoor de server de status kan behouden en de interacties van de gebruiker over meerdere verzoeken kan identificeren.
4. Verbindingen volgen: De server onderhoudt een verbindingspool en houdt open verbindingen van verschillende clients bij. Elke verbinding is gekoppeld aan een unieke identificatie (bijvoorbeeld een socketdescriptor) waarmee de server verzoeken voor elke verbinding onafhankelijk kan verwerken.
In wezen fungeert de server als een schakelbord, waarbij hij verzoeken ontvangt van verschillende bronnen (browserinstanties geïdentificeerd via IP:port en headers) en deze op de juiste manier doorstuurt op basis van de verstrekte informatie. Zelfs als er meerdere verzoeken tegelijkertijd binnenkomen, verwerkt de server deze één voor één of gelijktijdig met behulp van threads of processen, waarbij de context van elk verzoek behouden blijft via de informatie die in het verzoek zelf en de bijbehorende verbinding wordt verstrekt. |