WebSocket Opening Handshake
一往復
レスポンスを受け取ると、コネクションが確立され、双方向通信が可能になる
クライアントからHTTPリクエストを送る
例
requestGET /chat HTTP/1.1
Host: example.com
Upgrade: websocket ┐
Connection: upgrade ┘upgrade
Sec-WebSocket-Version: 13 ┐
Sec-WebSocket-Key: E4WSEcseoWr4csPLS2QJHA== ┘ versionの指定
Sec-WebSocket-Protocol: chat, superchat
HTTPで来たけど、「これはWebSocketだぜ」ってことをサーバーに伝える
Sec-WebSocket-Version
現時点では13固定らしい
サーバーがこのバージョンに対応してなければコネクションを切断する
Sec-WebSocket-Key
特定のクライアントとのコネクションの確立を示すために使う
ランダムな16byteの値を
Base64でエンコードしたもの
Sec-WebSocket-Protocol
オプション。指定しなくてもいい
どういう形式を使うかを指定する
よくわからん

それに対するレスポンス
responseHTTP/1.1 101 OK
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: 7eQChgCtQMnVILefJAO6dK5JwPc=
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Accept
リクエストの Sec-WebSocket-Key
を元にして生成する
通信確立を検証するために用いる
Sec-WebSocket-Protocol
リクエストの Sec-WebSocket-Protocol
から一つを選んで返す
参考