WebSocket-protokollet möjliggör att både klient och server kan skicka meddelanden till varandra utan att behöva göra nya HTTP-anrop för varje meddelande. Efter en initial “handshake” via HTTP uppgraderas kommunikationskanalen till WebSocket, och därefter blir förbindelsen kvar och kan användas i båda riktningarna.
Detta är särskilt användbart i realtids-applikationer såsom chat, spel, aktiekurser eller IoT-lösningar där det är viktigt att kunna “trycka” data från servern till klienten direkt - utan att klienten måste fråga om uppdateringar hela tiden. Eftersom WebSocket använder portar som vanligen redan öppnas för HTTP (80 och 443) och fungerar med många proxy- och brandväggsmiljöer, blir det ett praktiskt val för modern webbinfrastruktur.
I praktiken innebär det att du initierar en anslutning via t.ex. ws:// eller wss:// (säkert över TLS), skickar ett HTTP GET-anrop med “Upgrade: websocket”, och servern svarar med 101 Switching Protocols - därefter kan du skicka text- eller binärdata fritt i båda riktningarna så länge anslutningen är öppen. Sambandet mellan HTTP och WebSocket är alltså främst i handskakningen - därefter fungerar protokollet som ett fristående full-duplex-kanal.

