2011-06-21 24 views
3

私はHTML5/WebSocketクライアントとHTTP/WSサーバーで構成されるtestappを持っています。両方のサーバーはC#にあります。 HTTPサーバーは私自身の単純なもので、WSサーバーはまた、http://nugget.codeplex.com/の概念に基づいて自作しています。 HTTPサーバーは0.0.0.0:5959でリッスンし、WSサーバーは0.0.0.0:5960でリッスンしています(クライアントからの接続は受け入れますが、別のポートで受け入れます)。WebSocketは127.0.0.1/localhost以外に接続しません

私のindex.htmlには、WebSocketを'ws://'+document.location.hostname+':5960/'(つまり、Webページと同じIPアドレスですが、ポート5960)に開くJavaScriptが含まれています。 WSサーバーはサンプルデータを100msごとに送信します。全体的に、それはかなり簡単なデモです。 Windows7でChrome 12.0を使用しています。

私はHTTPサーバーが127.0.0.1:5959またはlocalhost:5959を指しているブラウザのいずれかのクライアントから動作していることを発見しました。これはどのマシン(マインまたはリモートマシン)でも動作します。 「リモート」は私の机の上にある別のPCです:)私のサーバーマシンのワーク内部10ネットアドレス10.122.0.159:5959に当たっています。 HTTPの土地ではすべてが期待どおりに機能します。

ただし、WebSocketは127.0.0.1およびlocalhostでのみ動作します。リモートマシンは10.122.0.159:5959からHTMLを正常に取得できますが、WebSocketは10.122.0.159:5960に接続しません。実際に、自分のローカルブラウザに自分自身の10-netアドレス(10.122.0.159:5959)を指定すると、同じ結果が得られます.HTMLはロードされますが、WebSocketは接続されません。

これはなぜ起こっているのでしょうか? CORSでは、WSからのHTTP要求と同じポートを使用する必要がありますか。もしそうなら、127.0.0.1のルールに対する特別な例外はありますか? //リクエスト:

多くのおかげで、
-Dave

アップデートは
WSを遮断するプロキシサーバによって引き起こされているように見えます。私たちの会社はコンテンツフィルタリングのためのプロキシサーバーとすべての通常のものを使用しており、私たちのブラウザはそれを使用するように構成されています。
ChromeはIEのプロキシ設定を使用し、IEのデフォルト設定はではなく、はプロキシサーバーを使用します。ローカル接続にもプロキシサーバーを使用させるためにチェックボックスをオンにすると、私のws://要求がlocalhostにブロックされます。逆に、「プロキシサーバーを使用する」ボックスをオフにすると、になります。リモートマシンと同様に、リモートマシンのプロキシをオフにすると、になります。wx://要求。
これはプロキシのことであり、CORSやソケットのことではなく、今私はITスタッフとプロキシ設定を探求していません。

+3

「私たちのITスタッフに変更を求めてください」という世界では、これまでどんな世界で動作しますか? – Sphvn

答えて

1

実際にプロキシのことでした。
ITスタッフに変更を頼むのではなく(10.122.0.159の[Howto for IE/Chrome] [1])、単にプロキシをオフにしました。私はws://プロトコルのためにそれをオフにして簡単に実験しましたが、動作させることができませんでした。そのため、その1つのIPアドレスを開くだけです。

+0

これで、異なるマシンにインストールされているWebブラウザがWebサーバーを経由せずに接続できることを確認できますか? –

+0

あなたはそれをすることはできません。 WSプロトコルはHTTPからのアップグレードであるため、HTTP要求から始める必要があります。そのため、HTTP要求を入力するWebサーバーが必要です。したがって、ブラウザ間でのみ動作します。ブラウザーからブラウザーへの切り替えが必要な場合は、仲介者として動作するhttpserverが必要です。 – dlchambers

+0

@dlchambersまたはwebRTCを使用するhttps://www.html5rocks.com/en/tutorials/webrtc/basics/ – CaffeineAddiction

2

クロスソースでは、ハンドシェイクのCORSセキュリティによって管理されるものを除き、WebSocketの制限はありません。

WebSocketサーバーに何か問題があり、接続のためにlocalhostだけをリッスンしているようです。 Nugget(WebSocketServer.cs)のOnClientConnectルーチンにデバッグ出力を追加して、ソケット接続がいつ発生するかを確認できます。サーバーに問題がないと思ったら、wiresharkを使用し、ローカル接続とリモート接続を比較することをお勧めします。

また、Silverlight WebSocketプロトタイプ(README)をIE 9で使用している場合、WebSocket接続のポート4502-4534に制限されています。 localhostの場合、この制限が解除されている可能性があります。

関連する問題