Amazon CloudFront
開発者ガイド (API バージョン 2016-09-29)

CloudFront ディストリビューションで WebSocket を使用する

Amazon CloudFront は、WebSocket の使用をサポートしています。これは、クライアントとサーバー間の長時間の双方向性接続が必要な場合に便利な TCP ベースのプロトコルです。永続的な接続は、多くの場合、リアルタイムアプリケーションでの要件です。Websockets を使用するシナリオには、ソーシャルチャットプラットフォーム、オンラインコラボレーションワークスペース、マルチプレイヤーゲーム、および金融取引プラットフォームのようなリアルタイムのデータフィードを提供するサービスが含まれます。WebSocket 接続経由のデータは、全二重通信に対して双方向に流れることができます。

CloudFront は、WebSocket 接続がグローバルにサポートされており、追加設定は不要です。クライアントとサーバーの両方がプロトコルをサポートしている限り、すべての CloudFront ディストリビューションには、WebSocket プロトコルサポートが組み込まれています。

WebSocket プロトコルの仕組み

WebSocket プロトコルは、独立した TCP ベースのプロトコルであり、これによって HTTP のオーバーヘッド (および潜在的なレイテンシーの増加) の一部を回避することができます。

WebSocket 接続を確立するために、クライアントはプロトコルの変更のため HTTP のアップグレードセマンティクスを使用する通常の HTTP リクエストを送信します。その後、サーバーはハンドシェイクを完了できます。WebSocket 接続は開いたままで、クライアントまたはサーバーが毎回新しい接続を確立する必要なしに互いにデータフレームを送信できます。

デフォルトでは、WebSocket プロトコルは通常の WebSocket 接続にポート 80 を使用し、TLS/SSL 経由の WebSocket 接続ではポート 443 を使用します。CloudFront ビューアープロトコルポリシー および オリジンプロトコルポリシー に選択したオプションは、HTTP トラフィックだけでなく、WebSocket 接続にも適用されます。

WebSocket の要件

WebSocket リクエストは、以下の標準形式で RFC 6455 (http://tools.ietf.org/html/rfc6455) に準拠する必要があります。

サンプルクライアントリクエスト:

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

サンプルサーバー応答:

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

WebSocket 接続がクライアントまたはサーバーによって、またはネットワークの中断によって切断された場合、クライアントアプリケーションはサーバーとの接続を再開する必要があります。