WebSocket est un protocole de communication pour une connexion TCP persistante, bidirectionnelle et full duplex entre le navigateur Web d'un utilisateur et un serveur. Pour établir une connexion WebSocket, une poignée de main WebSocket est envoyée à partir de la connexion HTTP du navigateur. Cette demande sera transmise à un serveur afin de mettre à niveau la connexion. Outre l'en-tête de demande de mise à niveau, la demande de poignée de main comprend un en-tête Sec-WebSocket-Key de 64 bits. Un en-tête Sec-Websocket Auth renvoie une réponse du serveur contenant une valeur de hachage de la clé. L'échange d'en-tête empêche un proxy de mettre en cache les échanges WebSocket précédents.
La connexion devient binaire à partir de ce moment-là et ne se conforme pas au protocole HTTP. Le programme serveur est conscient de chaque connexion WebSocket et peut interagir avec elles individuellement. WebSocket peut être ouverte par le serveur ou l'utilisateur jusqu'à la fermeture de la session. La programmation web événementielle est possible car la communication peut être initiée de part et d'autre. Le protocole HTTP standard, en revanche, ne permet aux utilisateurs que de demander de nouvelles données.
WebSocket est apparu pour la première fois dans les spécifications HTML5 sous le nom de TCPConnection. Il s'agissait d'un substitut pour une API qui utilise TCP pour se connecter aux sockets. Ian Hickson et Michael Carter ont développé le protocole, qui a été normalisé par l'IETF dans la RFC 6455. WebSocket peut être utilisé par presque tous les navigateurs web, y compris Firefox, Chrome et Opera.