1

websocket プロトコルを実装しようとしていますが、何らかの理由で iPad が連携していません。iPad はHybi-00 仕様を実行しており、問題はハンドシェイクのどこかにあります。リクエストと次のマジック バイトを読み取り、正しい返信であると思われる内容で応答しています。iPad は私に同意せず、接続をシャットダウンします。

プロトコル ハンドラーは、ほとんどの最新ブラウザーで実行されるHybi-06で動作しています。

問題を解決できるように、iPadが websocket 接続をシャットダウンすることにした理由を教えてくれる方法が本当に欲しいです。それか、クロムまたは他のブラウザを取得して、WebsocketバージョンをiPadがサポートするのと同じバージョンにダウングレードして、実際に何が起こっているかについて何らかの手がかりを得ることができます.

この情報を取得する方法はありますか?

さて、実際のエラーを説明してもらえるとうれしいのですが、ハンドシェイクは次のとおりです。

GET /myurl HTTP/1.1
Upgrade:WebSocket
Connection:Upgrade
Host:my-host.com
Origin:https://my-host.com
Sec-WebSocket-Key1:1  QB  9 ,  $169780@8A`@4
Sec-WebSocket-Key2:3 160RhGi7mu  97*66br9

次の 8 バイトがキーです。

{byte[8]}
    [0]: 105
    [1]: 199
    [2]: 161
    [3]: 204
    [4]: 5
    [5]: 176
    [6]: 104
    [7]: 199

サーバーはこれで応答します

HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade:WebSocket
Connection:Upgrade
Sec-WebSocket-Origin:https://my-host.com
Sec-WebSocket-Location:ws://my-host.com/

そして鍵

{byte[16]}
    [0]: 100
    [1]: 132
    [2]: 37
    [3]: 58
    [4]: 243
    [5]: 195
    [6]: 173
    [7]: 26
    [8]: 180
    [9]: 239
    [10]: 33
    [11]: 56
    [12]: 40
    [13]: 192
    [14]: 123
    [15]: 255

これは HTTPS 接続を介して実行されるため、基本的にはデバッガーからのデータです。これは、私の人生でこれを抽出するように正しく構成された Wireshark を取得できないためです。私が知る限り、ハンドシェイク キーも正しいです。

4

2 に答える 2

0

Hybi-06 は単なる仕様であったプロトコルのバージョンです。私の間違いでなければ、実際にそのバージョンを実装するブラウザーはありませんでした。iOSは現在Hybi00を使用していると言うように、ほとんどのブラウザはHybi-10に移行し、次にHybi-17(Rfc6455)に移行したと思います。その特定のハンドシェイクをサポートするサーバーがいくつかあります。また、ドラフトのすべてのバージョンをサポートする人がいくつかいることも知っています。

私はXSockets.NETを実行しています。Hybi-00 と RFC6455 バージョンをサポートすることを選択しました。これらはブラウザーに実装されているプロトコルだからです。(Safari はまだ Hybi00 上にあります)

RFC6455 のように、複数のプロトコルのサポートに関するセクションがあります。

https://www.rfc-editor.org/rfc/rfc6455#page-26

何かを実装している場合は、RFC6455 を実行することをお勧めします

于 2012-10-25T12:33:30.850 に答える
0

このスレッドを見てください。

Cybear が指摘するように、iOS6 にアップグレードすることをお勧めします。現在の統計によると、iOS ユーザー全体の約 60% が iOS6 を使用しています

于 2012-10-25T09:33:02.147 に答える