Web Socketについて(基礎)
Web Socket とは
WebSocket は、クライアント(Webブラウザなど)とサーバーの間で、双方向のリアルタイム通信 を可能にするプロトコルです ( HTTPとは異なるプロトコル)
通常の HTTP 通信は「リクエスト → レスポンス」という単方向通信ですが、WebSocket を使うと、クライアントとサーバーが常に接続を維持し、どちらからでもデータを送信できる ようになります。
特徴
持続的な接続(Persistent Connection)
- 一度接続を確立すると、通信が終了するまで接続を維持。
- 通常のHTTPリクエストのように、毎回接続を作り直す必要がない。
軽量なプロトコル
- WebSocketは、HTTPヘッダーが不要なため、通信量が少なく高速。
- 通信のオーバーヘッドが減り、リアルタイム性が向上する。
ポート番号
- HTTP(80)とHTTPS(443)と同じポートを使用可能。
ws://example.com
(非暗号化)またはwss://example.com
(TLS暗号化)
WebSocketの動作の流れ
ハンドシェイク(初期接続)
- クライアントが
ws://
またはwss://
を使ってサーバーに接続を要求。 - 通常のHTTPリクエストを利用して WebSocket接続 を開始。
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9YZrdz== # クライアントが送信
Sec-WebSocket-Version: 13
補足
httpとweb socketは別のプロトコルであるにも関わらず、なぜ、初期接続の時に、httpリクエストがweb socketで使われているのですか?(結局同じプロトコルってこと?
HTTP と WebSocket は異なるプロトコルですが、WebSocketの接続(ハンドシェイク)には HTTPリクエストが使われているだけです(ややこしいですが) → 最初はHTTPで、あとから web socketに切り替わるイメージです(web socket通信を開始するために、その最初のプロセスでHTTPを使っているだけ)
WebSocket接続を開始するとき、クライアントは 通常のHTTPリクエスト をサーバーに送信します。このリクエストには、特別なヘッダー Upgrade: websocket
が含まれています。
この Upgrade: websocket
ヘッダーがポイントです。
これは「通常のHTTP通信からWebSocket通信に切り替えてください」とサーバーに依頼するものです。
サーバーは 101 Switching Protocols
というレスポンスを返し、プロトコルをWebSocketに変更します。
■サーバの応答例
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
この応答を受け取った時点で、HTTPの役割は終了し、以降の通信はWebSocketプロトコルに切り替わります。
つまり、HTTPはWebSocketを開始するためだけに使われ、その後はWebSocketの独自プロトコルでやり取りされる という流れです。
ディスカッション
コメント一覧
まだ、コメントがありません