The WebSocket protocol is designed to work with existing network infrastructure. As part of this design principle, the protocol specification for a WebSocket connection defines an HTTP connection as the beginning of its life cycle, thus ensuring full backward compatibility with the pre-WebSocket world. Generally speaking, switching WebSocket from HTTP protocol is called WebSocket handshake.
The browser sends a request to the server, indicating that it wants to switch the WebSocket protocol from HTTP. The client’s desire expressed through the upgrade title, the code is as follows:
If the server understands the WebSocket protocol, it agrees to the protocol switch via the Upgrade header.
At this point the HTTP connection breaks down and replaces the WebSocket connection on the same underlying TCP/IP connection. WebSocket connections use HTTP (80) and the same port as HTTPS (443), by default.
After the connection is established, WebSocket data frames can be sent back and forth between the client and server in full-duplex mode. Both text and binary frames can be sent simultaneously in both directions. Only two bytes of data are minimally framed. For text frames, each frame starts at 0x00 bytes and ends at 0xff bytes, containing UTF-8 data. WebSocket text frames use a terminator, while binary frames use a prefix length.