メインコンテンツまでスキップ

RFC 6455 - The WebSocket Protocol (WebSocketプロトコル)

発行日: 2011年12月
ステータス: 標準化過程 (Standards Track)
著者: I. Fette (Google Inc.), A. Melnikov (Isode Ltd.)


概要 (Abstract)

WebSocketプロトコル (WebSocket Protocol) は、単一のTCP接続上でクライアントとサーバー間の全二重通信 (Full-Duplex Communication) を実現します。WebSocketプロトコルは、Webブラウザおよびwebサーバーに実装されることを想定していますが、任意のクライアントまたはサーバーアプリケーションで使用できます。

WebSocketプロトコルは、TCPベースの独立したプロトコルです。HTTPとの唯一の関係は、そのハンドシェイク (Handshake) がHTTPサーバーによってアップグレードリクエスト (Upgrade Request) として解釈されることです。


目次 (Table of Contents)


追加リソース


関連RFC

  • RFC 6455: The WebSocket Protocol ← 本文書
  • RFC 7692: WebSocket Compression Extensions (WebSocket圧縮拡張)
  • RFC 8441: Bootstrapping WebSockets with HTTP/2 (HTTP/2でのWebSocketブートストラップ)

クイックリファレンス

WebSocket URI形式

ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ]
  • ws:// - 暗号化されていない接続 (デフォルトポート80)
  • wss:// - TLS暗号化接続 (デフォルトポート443、本番環境推奨)

ハンドシェイク例

クライアントリクエスト:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Origin: http://example.com

サーバーレスポンス:

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

フレームタイプ (Opcode)

Opcodeタイプ説明
0x0Continuation継続フレーム
0x1Textテキストフレーム (UTF-8)
0x2Binaryバイナリフレーム
0x8Closeクローズフレーム
0x9PingPingフレーム (ハートビート)
0xAPongPongフレーム (ハートビート応答)

クローズステータスコード

コード名称説明
1000Normal Closure正常クローズ
1001Going Awayエンドポイントの離脱 (例: ページナビゲーション)
1002Protocol Errorプロトコルエラー
1003Unsupported Dataサポートされていないデータ型
1006Abnormal Closure異常クローズ (Closeフレーム未送信)
1009Message Too Bigメッセージが大きすぎる
1011Internal Errorサーバー内部エラー

フレーム構造 (基本形式)

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+-------------------------------+
| Extended payload length continued, if payload len == 127 |
+-------------------------------+-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------+-------------------------------+

重要ポイント:

  • FIN: 1=最終フレーム, 0=後続フレームあり
  • MASK: クライアント→サーバーは1でなければならない、サーバー→クライアントは0でなければならない
  • Opcode: フレームタイプ識別子
  • Payload Length: データ長 (0-125は直接表現、126は16ビット使用、127は64ビット使用)

主要用語

英語用語日本語訳説明
Full-Duplex Communication全二重通信双方向同時通信
Opening HandshakeオープニングハンドシェイクHTTPからWebSocketへのアップグレードプロセス
Closing Handshakeクロージングハンドシェイク正常な接続クローズプロセス
Frameフレームデータ転送の基本単位
Messageメッセージ1つ以上のフレームで構成
Maskingマスキングクライアントデータは必須マスク (セキュリティ機構)
Fragmentationフラグメンテーション大きなメッセージを複数フレームで転送