Firefox と Chrome 18 で完全に動作する Websocket クライアント/サーバーがあります。Chrome 19 ベータ版では動作しません。サーバーがサポートしていない deflate-frame 拡張機能を使用しているこのブラウザーが原因であると思われます。
Chrome 19 ベータ版はハンドシェイクでこれを送信しています: "Sec-WebSocket-Extensions: x-webkit-deflate-frame"
サーバーが「Sec-WebSocket-Extensions:」を返信しています。
しかし、これは拡張機能を拒否する適切な方法ではないか、私がキャッチしていない何か他の問題があります。これは、動作中のブラウザーから来るものとは異なるハンドシェイクの唯一のものです。
編集:ここにいくつかの追加情報があります。これらは、Wireshark によってキャプチャされたハンドシェイクです。
Firefox 12 を使用したハンドシェイク:
GET /chatserver HTTP/1.1
Host: (この投稿では省略)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml, application/xml;q=0.9, / ;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive, Upgrade
Sec-WebSocket-Version: 13
Origin: (この投稿では省略)
Sec-WebSocket-Key: 2TKm4ozUQdNP17Lobt7IBg==
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
HTTP/1.1 101 スイッチング プロトコル
アップグレード: websocket
接続:
Sec-WebSocket-Accept のアップグレード: pSUB3BT9YUUd9n3mOeWY/1uVqJE=
Chrome 18 を使用したハンドシェイク:
GET /chatserver HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: (この投稿では
省略) Origin: (この投稿では省略)
Sec-WebSocket-Key: zuHLEC8pGvAMadarhCLXFA==
Sec-WebSocket-Version: 13
HTTP/1.1 101 スイッチング プロトコル
アップグレード: websocket
接続:
Sec-WebSocket-Accept のアップグレード: LMBSq6Bk9Kiv+zAbQlAL899pfzc=
Chrome 19 を使用したハンドシェイク:
GET /chatserver HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: (この投稿では
省略) Origin: (この投稿では省略)
Sec-WebSocket-Key: TbwnVcuUiqGgZn7hxvxzvQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
HTTP/1.1 101 スイッチング プロトコル
アップグレード: websocket
接続: アップグレード
Sec-WebSocket-Accept: D45BJ+Vfydy1Upcs3HZe/nuiaS8=
Sec-WebSocket-Extensions:
すべてのサーバー応答には \r\n 行末があり、メッセージの最後に余分な \r\n が含まれます。
FF12 と Chrome18は動作しますが、 Chrome19 は動作しません。Chrome19 では、サーバー ハンドシェイク応答の直後のパケットは FIN/ACK です。接続が閉じられています。
注意してください。Sec-WebSocket-Extensions 値としてハイフンを使用してみましたが、どちらも機能しませんでした。