1

ヒックソンの2010年5月のdraft-hixie-thewebsocketprotocol-76WebSocketプロトコルを読んだ人はいますか?

.htmファイルのソースは次のとおりです。

<html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript">
        var socket = new WebSocket('ws://localhost:8181/websession');
        socket.onopen = function() {
            alert('handshake successfully established. May send data now...');
        };
        socket.onclose = function() {
            alert('connection closed');
        };
    </script>
</head>
<body>
</body>
</html>

8181でリッスンしているTCPポートがある場合、これは上記の.htmファイルをChromeにロードしたときに取得するリクエストです。

GET /websession HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
[\n]

([\ n]はCRLF文字です。)

このハンドシェイクオープナーに何を戻す必要がありますか?ドラフト-hixie-thewebsocketprotocol-76は次のことを示しています。

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample

8jKS'y:G*Co,Wxa-

ただし、この応答によりsocket.onclose発火します。

4

2 に答える 2

2

ドラフト 76 では、WebSocket-応答ヘッダーの名前が に変更さSec-WebSocket-れ、不必要に醜いKeyヘッダーと要求本文の暗号化要素が追加されまし8jKS'y:G*Co,Wxa-た。これに対する応答です。しかし、それはドラフトに含まれる例に対する正しい応答にすぎません。他のリクエストに対してその特定の文字列を返すのは良くありません。新しいプロトコルの実装方法については、この投稿を参照してください。

いずれにせよ、最新の開発ビルドを使用していない限り、Chrome/Chromium は古いドラフト 75 プロトコルを引き続き使用し (投稿した要求が示すように)、新しいプロトコルを実装するサーバーと通信しません。詳細については、Chromium ブログを参照してください。古い/現在の Chrome バージョンをサポートする必要がある場合は、効果的に 2 つの WebSocket プロトコルを実装する必要があります。

これは、まだ標準化されていないプロトコルに対するものを開発する際のリスクです。WebSocket が完成するまでは、煩わしい相互運用性が期待できます。それまでは控えたほうがいいかもしれません。

(仕様を実際に読んで、読めない解析アルゴリズムの中で何が変わったのかを正確に理解しようとするのは、フラストレーションのエクササイズです。RFC が好む通常の BNF スタイルの仕様ではなく、なぜこのように書かれているのかわかりません。 Hixie が C でパーサーを書き、コードを英語に変換する自動ツールを書いたかのように.C の方が読みやすい TBH だったでしょう.)

于 2010-06-29T11:23:07.250 に答える
0

noVNC に含まれている wsproxy が参考になるかもしれません。WebSockets v75 および v76 クライアントの両方を透過的にサポートします。

wsproxy は、TCP ソケット プロキシに対する一般的な WebSocket です。noVNC には wsproxy の C バージョンと Python バージョンの両方が含まれています。

http://github.com/kanaka/noVNC/tree/master/utils/

また、物事を興味深いものにするために、最新の (まだバージョンはありません) 草案の提案では、物事が再び変更されています (特に、物事の組み立て方が変更されています): http://www.whatwg.org/specs/web-socket-protocol/

于 2010-10-14T04:52:51.077 に答える