LoginSignup
4
4

More than 5 years have passed since last update.

WebSocketの接続

Last updated at Posted at 2017-10-13

概要

RFCのThe WebSocket Protocol section1-1には以下のように書かれています。
*RFCとは、IETFが管理している、通信の相互接続性を維持するために共通化された仕様書集です。

WebSocketプロトコルは、既存のHTTPをトランスポートとして使用する双方向通信技術です。

つまり、サーバー/クライアント間で、オーバーヘッドの小さい双方向通信を実現するプロトコルです。
HTTPと違ってステートフルな通信であるため、送信先の情報は持ちません。HTTP通信でいう、bodyのみ送信しているようなイメージです。

接続

リクエスト

最初にクライアントから以下のようなリクエストが送信されます。
*RFCのThe WebSocket Protocol section1-2より引用

リクエスト
 GET /chat HTTP/1.1
 Host: server.example.com
 Upgrade: websocket
 Connection: Upgrade
 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
 Origin: http://example.com
 Sec-WebSocket-Protocol: chat, superchat
 Sec-WebSocket-Version: 13

ヘッダーの意味

特徴的なヘッダーの意味を説明します。
Upgrade:
指定のプロトコルにアップグレードすることを意味する。
ここでは、HTTPからWebSocketにスイッチすることを意味している。

Sec-WebSocket-Key:
ランダムな文字列からBASE64エンコードした文字列。
サーバーとの通信確立を検証するためのkey

Sec-WebSocket-Protocol:
サブプロトコルを指定する。
WebSocketはソケット通信機能だけを提供するため、どのような形式を使うかはアプリケーションで決める必要がある。

Sec-WebSocket-Version:
WebSocketのバージョンを指定する。
2017/10/13現在はVer13で固定

レスポンス

以下のようなレスポンスが返ってきます。
*RFCのThe WebSocket Protocol section1-2より引用

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

ヘッダーの意味

Sec-WebSocket-Accept:
リクエストヘッダに記載されていたSec-WebSocket-Keyを、決まったルールで変換した文字列。
これによってクライアント/サーバ間の通信確立を検証出来る。

Sec-WebSocket-Protocol:
クライアントがSec-WebSocket-Protocolヘッダにて指定していたサププロトコルの中の一つを選択して返す。

双方向通信の開始

クライアントがSec-WebSocket-Protocolヘッダにて指定したサブプロトコルがサーバーから返ってきたら、双方向通信を開始します。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4