WebSocket プロトコルは、既存のネットワーク インフラストラクチャで動作するように設計されています。この設計原則の一環として、WebSocket 接続のプロトコル仕様では HTTP 接続をライフサイクルの開始点として定義し、WebSocket 以前の世界との完全な下位互換性を確保しています。一般に、WebSocket を HTTP プロトコルから切り替えることを WebSocket ハンドシェイクと呼びます。
ブラウザは、WebSocket プロトコルを HTTP から切り替えたいことを示すリクエストをサーバーに送信します。アップグレードのタイトルを通じてクライアントの要望が表現されており、コードは次のとおりです:
サーバーが WebSocket プロトコルを理解している場合は、Upgrade ヘッダーを介してプロトコルの切り替えに同意します。
この時点で、HTTP 接続が切断され、同じ基盤となる TCP/IP 接続上の WebSocket 接続が置き換えられます。 WebSocket 接続は、デフォルトで HTTP (80) と HTTPS (443) と同じポートを使用します。
接続が確立されると、WebSocket データ フレームを全二重モードでクライアントとサーバー間で送受信できます。テキスト フレームとバイナリ フレームの両方を両方向に同時に送信できます。 2 バイトのデータのみが最小限にフレーム化されます。テキスト フレームの場合、各フレームは 0x00 バイトで始まり 0xff バイトで終わり、UTF-8 データが含まれます。 WebSocket テキスト フレームはターミネータを使用しますが、バイナリ フレームはプレフィックス長を使用します。