- リクエスト内のHTTPは、唯一つの応答することができます。そして、応答は受動的であり、開始することはできません
- そのため、過去のサービス側のプッシュ情報は、ポーリングを達成するために、クライアントによって保持されます
- WebSocketのは、双方向の情報をプッシュするためのイニシアチブを取るために、サーバーの容量を提供する通信プロトコル
- それがなるなり、接続、作成するのWebSocket必要ステートフルなプロトコルを、ステータス情報は、部分的な通信の後に省略することができます。ステートレスの HTTPリクエストは、リクエストごとに(等認証等)の状態情報を運ぶために持っている必要があるかもしれません
- デフォルトのポートは80と443であります
- 必要クライアント(ブラウザ)とサーバーの両方をサポート
- エージェントの後に、エージェントはまた、サポートが必要な場合は、それ以外のいくつかのエージェントは、自動的に通信することなく、ときに長い時間が切断されます
- したがって、WS接続が切断されていないことを確認するためには、ハートビートを送信します
- WebSocketの接続が確立された後、後続のデータは、フレームのシーケンスの形で送信されます
- HTTPは、WebSocketの接続を確立するための唯一の責任があります
- HTTPヘッダを交換することができ、後続のデータを送信する必要はありません。
- WebSocketは、HTTPプロトコルに基づいて、またはされ借りハンドシェークの完全な部分にHTTPプロトコルを
Sec-WebSocket-Key
の妥当性を検証するためにサーバーのブラウザで生成されたBase64の値であります
Sec-WebSocket-Accept
サーバーが識別され、暗号化された後、Sec-WebSocket-Key
- なります
Sec-WebSocket-Key
と258EAFA5-E914-47DA-95CA-C5AB0DC85B11
ステッチ
- SHA1ダイジェストで計算され、base64文字列に変換されます。
- HTTPリクエストに応答して完了ステータス・コードの後に
101
交換プロトコルを示します、
- 彼らはhttpプロトコルとは何の関係もありませんした後、説明用WebSocketプロトコルは、HTTPプロトコルを介してTCPトランスポート層接続を確立します
// 客户端请求
GET ws://example.com/ HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
// 服务器应答
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat