概要

Client(Browser) と Server で対話的な通信セッション = 双方向通信 を開くプロトコル Layer 7 / HTTP とは互換性があるものの、別プロトコル WebSocketのハンドシェイクはHTTP/1.1 Upgradeヘッダーを使用し、HTTPプロトコルをWebSocketプロトコルに変更するように実現

Point

サーバープッシュ(サーバーが起点となって、ブラウザにデータを配信する)ことが従来技術だと難しいところを解決 ハンドシェイクだけ、HTTPぽい通信だけど、その上はTCP上で独自のフレームになる これがない時代は HTTPセッションを長期間ポーリング

RFC rfc6455

https://tex2e.github.io/rfc-translater/html/rfc6455.html

WebSocket のセキュリティ

https://devcenter.heroku.com/ja/articles/websocket-security ws:/じゃなくて、SSL上の wss:/ ws使って、トンネリングしない。これをすると、DBなどの通信が XSSの対象となっちゃう WebSocket プロトコルでは、承認や認証が処理されません。

AWS的な話

  • WebSocket は WAFでは対応不可ぽい
  • WebSocket にUpgrade されるまでは HTTP なのでWAFの対象

資料

https://ja.javascript.info/websocket

https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/gamelift_quickstart_customservers_designbackend_arch_websockets.html

https://tex2e.github.io/rfc-translater/html/rfc6455.html