WebSocketとは
対応ブラウザ
※Windows 7上で動作確認を行っています。
※ブラウザの設定より、異なる挙動をする場合があります。
※ブラウザにWebSocket自体が実装されている場合に「○」としています。個々のメソッドや属性などについては未実装である場合があります。
解説
WebSocketは、サーバーとの間に双方向のリアルタイムの接続を実現するための、通信プロトコルとクライアント側APIです。
通常のHTTPによるサーバーとの通信は、クライアントがリクエストしてはじめて、サーバーがレスポンスを返し、その度に接続が完結するという形式を取ります。
この形式での通信は、サーバー側の状態変化をリアルタイムで、とくに複数のクライアントに対して通知したい、というリアルタイムチャットのようなケースでは問題があります。
リクエストするまでクライアントはサーバの状態を知ることができないため、頻繁にリクエストを行うことが必要ですが、その度に改めて再接続を行うことでデータ量や負荷の増大を招きます。
WebSocketでは、最初の接続リクエストはHTTPで行いますが、その後はTCP/IP上に独自のWebSocketプロトコルでの接続を開き、この同じ接続のうえで、リクエスト・レスポンスの方式ではない、リアルタイムの双方向通信を行うことで、こうした問題を解決します。
WebSocketでの通信は双方向通信であるため、相手側からのリクエストを必要とすることなく、それぞれが並行して自分から相手にデータを送ることができます。
WebSocketの互換性について
WebSocket通信プロトコルについては、ドラフト75版以前とドラフト76(ietf-hybi-00)版以降とでは互換性がありません。
メジャーな対応ブラウザの最新版はすべてドラフト76(ietf-hybi-00)版以降の仕様に準拠していますが、以前にリリースされたバージョンはその限りではありません。
プロトコルのバージョンは、ietf-hybi-04版以降に準拠したブラウザであれば、クライアントからの接続時のリクエストヘッダー「Sec-WebSocket-Version」によって知ることができます。
バージョン番号 | 対応する仕様 |
4 | ietf-hybi-04 |
5 | ietf-hybi-05 |
6 | ietf-hybi-06 |
7 | ietf-hybi-07 |
8 | ietf-hybi-08~12 |
13 | ietf-hybi-13~17、RFC 6455 |
SafariとOperaは、2012年1月執筆時点ではドラフト76(ietf-hybi-00)版に準拠しています。
FireFoxでは仕様の改訂の可能性を考慮して、FireFox10までのバージョンでは名称がMozWebSocketになっています。
Operaではプロトコルの脆弱性を考慮してWebSocketは既定で無効化されています。使用するには、「about:config」の「Enable WebSockets」の項目で有効化する必要があります。
関連項目