web-dev-qa-db-ja.com

80以外のポートでWebSocketを使用しますか?

80以外のポートでWebSocketを使用しますか?既存のWeb/HTTPインフラストラクチャを使用する目的全体を台無しにしますか?そして、それはもはや名前に当てはまらないと思いますWeb非80ポートのソケット。

他のポートでWebSocketを使用する場合、TCPを直接使用しないのはなぜですか?または、WebSocketプロトコル自体に特別な利点はありますか?

また、現在のWebSocketハンドシェイクはHTTP UPGRADEリクエストの形式であるため、WebSocketハンドシェイクを実現するには、ポートでHTTPプロトコルを有効にする必要がありますか?

55
smwikipedia

80以外のポートでWebSocketを使用しますか?既存のWeb/HTTPインフラストラクチャを使用する目的全体を台無しにしますか?そして、80以外のポートではWebSocketという名前にはもはや適合しないと思います。

ホストOSが許可し、クライアントが接続できるポートであれば、webSocketサーバーを実行できます。

ただし、ポート80(または443)で実行することには多くの利点があります。

  1. 通常、ネットワークインフラストラクチャは既に展開されており、クライアントが住んでいる場所(デスクトップコンピューター、モバイルデバイスなど)からサーバーが住んでいる場所(データセンターなど)へのアウトバウンド接続用にポート80で開かれます。そのため、ポート80にwebSocketアプリをデプロイするために、ファイアウォールやルーターの構成などに新しい穴を開ける必要は通常ありません。異なるポートで実行するには構成の変更が必要になる場合があります。たとえば、大規模な企業ネットワークの多くは、アウトバウンド接続を確立できるポートについて非常に慎重であり、特定の標準および予想される動作に対してのみ構成されています。一部の企業ネットワークでは、webSocket接続用の非標準ポートを選択できない場合があります。これがポート80を使用する大きな理由です(構成をロックダウンしたプライベートネットワークからの最大の相互運用性)。

  2. ブラウザから実行している多くのwebSocketアプリは、ホストWebページのポート80で既に使用されている既存のセキュリティ/ログイン/認証インフラストラクチャを活用したいと考えています。すべてが同じポート上にある場合、まったく同じインフラストラクチャを使用してwebSocket接続の認証を確認する方が簡単な場合があります。

  3. WebSocketの一部のサーバーインフラストラクチャ(node.jsのsocket.ioなど)は、サーバーインフラストラクチャ(単一プロセス、1つのリスナー)を組み合わせて、HTTPリクエストとwebSocketの両方をサポートします。両方が同じポートにある場合、これは簡単です。


他のポートでWebSocketを使用する場合、なぜTCPを直接使用しないのですか?または、WebSocketプロトコル自体に特別な利点はありますか?

WebSocketプロトコルは元々、ブラウザからサーバーまで機能するように定義されていました。ブラウザーからの一般的なTCPアクセスはないため、カスタムブラウザーアドオンのない永続的なソケットが必要な場合は、webSocketが提供されます。プレーンTCP接続と比較して、webSocketプロトコルはHTTP認証とCookieを活用する機能を提供します。これは、アプリレベルおよびエンドツーエンドのキープアライブping/pong(TCPが提供する標準的な方法です。ホップレベルのキープアライブ(エンドツーエンドではない)、組み込みのフレーミングプロトコル(TCPで独自のパケット形式を設計する必要があります)、およびこれらの高レベルの機能をサポートする多くのライブラリ。基本的に、webSocketはTCP(カバーの下でTCPを使用)よりも高いレベルで動作し、ほとんどの人が役立つと思われる組み込み機能を提供します。たとえば、TCPを使用する場合、最初にやらなければならないことの1つは、プロトコルの取得または設計(データを表現する手段)です。これはすでにwebSocketに組み込まれています。

また、現在のWebSocketハンドシェイクはHTTP UPGRADEリクエストの形式であるため、WebSocketハンドシェイクを実現するには、ポートでHTTPプロトコルを有効にする必要がありますか?

WebSocketリクエストはすべてHTTPリクエストで始まるため、webSocketを使用するポートでHTTPサーバーを実行する必要があります。高度な機能を備えたHTTPサーバーである必要はありませんが、最初のHTTP要求を処理する必要があります。

75
jfriend00

私の意見では、はい、できます。 80がデフォルトのポートですが、好きなように変更できます。

2
Jeremy