1. ホーム
  2. html

[解決済み] C# ナゲットサーバーエラー

2022-03-04 11:37:25

質問内容

現在、シンプルなクライアント・サーバー・ウェブソケット・デモを立ち上げ、実行しようとしているのですが、その際に C# ナゲットプロジェクト をサーバーとして使用します。 Netscape (v5.1.4) からはサーバーに接続できますが、Chrome (v18.0.1) からは接続できず、クライアントのハンドシェイクに問題があると突き止めました。

ナゲットは、クライアント・ハンドシェイクが以下のフォーマットであることを期待していますが、これはまさにNetscapeが送信している方法と同じです。

一方、Chromeのクライアントハンドシェイクは以下のような感じです。

Nuggetサーバーで問題を引き起こしている2つのリクエストの違い、つまりsec-websocketパラメータを強調しました。

NetscapeとChromesのクライアントハンドシェイクの実装は、異なるバージョンのwebsocket仕様に基づいていると推測しています。 どなたか詳しい情報をお持ちの方はいらっしゃいませんか? 両方のタイプのハンドシェイクを処理するコードを追加するだけで良いのでしょうか、それとも一方は非推奨なのでしょうか?

どんな洞察でも歓迎します。

ジェームス

リソース Websocketクライアントハンドシェイクを理解する

解決するには?

Netscapeが古い非推奨のものを話しているようです。 ヒキシー というプロトコルのバリエーションがあります。 Safariもこれを使用しています。 Chrome はより現代的な RFC 6455 . いずれはすべてのブラウザがRFC6455を使用するようになると思ってください。

できるだけ多くの種類のクライアントをサポートしたいと仮定すると、両方の variant を処理するコードを追加しても大丈夫です (実際、正しい)。 ポストハンドシェイクのリード/ライトのデータフレームングは、使用されているプロトコルバリアントによって変わることに注意してください。