RFC6455の「258EAFA5-E914-47DA- 95CA -C5AB0DC85B11」の意味がわかりません。サーバーがこのマジックストリングを必要とするのはなぜですか?そして、なぜWebSocketプロトコルにこのメカニズムが必要なのですか?
3 に答える
WebSocket プロトコルがこのメカニズムを必要とするのはなぜですか?
- Websocket 接続は、単純に以下のコードを使用して、ブラウザーによって要求されます。
new WebSocket("wss://echo.websocket.org")
デバッガーからは が表示101 GET
され、リクエスト ヘッダーを調べると、次の特定のエントリが表示されます。
Sec-WebSocket-Key: qcq+klmT4W41IrmG3/fseA==
これは、ブラウザを識別する一意のハッシュです。
- サーバー側では、
$client_key
ハッシュが受信されます。ハッシュ値のみが保持されます。戻り値は、PHP を使用すると次のようになります。
"Sec-WebSocket-Accept: " . base64_encode(sha1( $client_key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true))
ブラウザーは応答を返します (例)。
258EAFA5-E914-47DA-95CA-C5AB0DC85B11
これは、 websocketの一意のGUIDと連結された、送信されたキーの sha1 です。Sec-WebSocket-Accept: r1Km05q03xuNRYy7mxkCRRgbh2M=
ブラウザは、ハッシュが内部で行われた独自の計算と一致するかどうかを確認しています。その場合、ハンドシェイクは完了し、リモート サーバーは実際には実際の WebSocket サーバーであるため、トンネルが作成され、維持されます。
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers