2017-05-13 2 views
1

私はHTTPS経由で提供されるWebアプリケーションを持っています。いくつかの計算集約型の作業では、このWebアプリケーションは作業をサーバーにオフロードします。これを行うには、サーバーへのWebSocket接続を開きます。ウェブアプリケーションがローカルプログラムと話すための未来の方法は何ですか?

中央サーバーに負荷をかけることなく、オフラインでの使用と長時間の計算を可能にするために、ユーザーはDockerコンテナの形式でサーバーコンポーネントのバージョンをローカルにインストールできます。

これは、HTTPS WebアプリケーションがlocalhostにWebSocketを開く必要があり、安全でないWebSocketでなければならないことを意味します。もちろん、localhostの証明書を出荷することはできません。

少なくとも非セキュアエンドポイントにクロム、HTTPSページはありませんが開かWebSocketをしているので、私は最初に、これは可能ではないだろうと思った: Mixed Content error

しかし、への接続のための例外があるように思われますlocalhost。それでも、将来変化しないと考えるのは少し危険です。

通常のHTTP要求で通信をトンネリングするなど、これを行うには未来の方法がありますか?私は現代のすべてのブラウザで動作し、プラグインや追加のセットアップを必要とせず、何らかの方法でローカル接続をリスンするネイティブプログラムしか必要としないソリューションを期待しています。

+0

分散サーバー上でHTTPS証明書などを作成するために[Let's Encrypt](https://letsencrypt.org/)を使用していないのはなぜですか? – mertyildiran

+0

私は分散サーバを実行しません - ユーザはローカルにサーバコンポーネントを実行するので、localhostの証明書が必要になります... – fefrei

+0

これらの計算を別のアプリケーションではなく別のアプリケーションで実行しようとしている理由はありますか? webWorker? webWorkerでは、それは引き続きオフラインで動作しますが、https通信の問題はありません。 – jfriend00

答えて

1

localhostで認証されていないwebsocket接続を公開したくない場合、別のページでlocalhostに接続して、ローカルコンピュータに証明書を発行してもローカルコンピュータに(潜在的に危険な/安全でない) 。

マシンにインストールしたクライアントで自己署名証明書を生成することをお勧めします。また、Webサーバーにはしか知られていない業界標準のユーザー単位認証(おそらく単純なHTTPヘッダー認証のフィールドを使用)を使用することを強くお勧めします。あなたがクライアントのダウンロードでキーを供給できるなら、それは理想的でしょう。それ以外の場合、クライアントはWebサーバーに直接話して、このキーを取得することができます(ユーザーはクライアントを介してログインします)。 Webサーバーは、キーをブラウザに渡すことができます。ブラウザは、適切な権限を持つlocalhostへの接続を開きます。

+0

私の中央Webサーバーはそれで役割を果たすことはできませんが、正当なクライアントだけがタスクを送信できることを確認するために何らかの認証が必要であることに同意しますユーザーがローカルに稼働しているサーバーコンポーネントに送信したいタスクについての知識がありません)。 しかし、これは実際に私の質問には答えません。つまり、このローカル接続のための接続メカニズムは、少なくとも若干未来のものです。 – fefrei

+2

あなたの唯一の関心事は接続性を確保することです、私はちょうどウェブソケットの代わりにxhrストリーミングを使用したいと思います(私はあなたがその多くのデータをローカルサーバーにプッシュする必要はないと仮定します)。 Socket.ioは既にこの機能や他の多くのライブラリを提供しています。 Websocketsは過剰な可能性があり、すべてのブラウザで完璧なサポートを得られていません。 –

+0

私はWebSocketのサポートを実装しなければなりません(私が実装しているプロトコルの仕様に準拠するため)、XHRを使うことはプレーンなWebSocketsよりも*もっと*機能します。 WebSocketのサポートは[広く普及している]ようです(http://caniuse.com/#search=WebSocket)。 HTTP-to-localhostにWebSocket-to-localhostよりも未来があると想定する理由はありますか? (もしそうなら、私はそれを実装する正当な理由があると考えています) – fefrei

関連する問題