Le protocole WebSocket est conçu pour fonctionner avec l'infrastructure réseau existante. Dans le cadre de ce principe de conception, la spécification du protocole pour une connexion WebSocket définit une connexion HTTP comme le début de son cycle de vie, garantissant ainsi une compatibilité ascendante totale avec le monde pré-WebSocket. De manière générale, le passage de WebSocket à partir du protocole HTTP est appelé prise de contact WebSocket.
Le navigateur envoie une requête au serveur, indiquant qu'il souhaite faire passer le protocole WebSocket de HTTP. Désir du client exprimé à travers le titre de la mise à niveau, le code est le suivant :
Si le serveur comprend le protocole WebSocket, il accepte le changement de protocole via l'en-tête Upgrade.
À ce stade, la connexion HTTP tombe en panne et remplace la connexion WebSocket sur la même connexion TCP/IP sous-jacente. Les connexions WebSocket utilisent HTTP (80) et le même port que HTTPS (443), par défaut.
Une fois la connexion établie, les trames de données WebSocket peuvent être envoyées entre le client et le serveur en mode full-duplex. Les trames texte et binaires peuvent être envoyées simultanément dans les deux sens. Seuls deux octets de données sont minimalement cadrés. Pour les blocs de texte, chaque cadre commence à 0x00 octets et se termine à 0xff octets, contenant des données UTF-8. Les cadres de texte WebSocket utilisent un terminateur, tandis que les cadres binaires utilisent une longueur de préfixe.