httpセッションとhttpsセッションの両方にSSLServerSocketクラスを使用して、1つのポートをリッスンできますか(クライアントにhttpまたはhttpsが付属している自動検出を使用)?または、 2つのポートを開き、httpsにはSSLServerSocketを使用し、httpにはServerSocketを使用する必要がありますか?
ありがとう
httpセッションとhttpsセッションの両方にSSLServerSocketクラスを使用して、1つのポートをリッスンできますか(クライアントにhttpまたはhttpsが付属している自動検出を使用)?または、 2つのポートを開き、httpsにはSSLServerSocketを使用し、httpにはServerSocketを使用する必要がありますか?
ありがとう
あなたがやろうとしていることは、ポートの統合と呼ばれます。たとえば、Grizzly で実装されています。
SSLServerSocket
HTTP と HTTPS の両方のトラフィックをリッスンするために を直接使用することはできません。読み取り時に直接ハンドシェイクが開始さServerSocket
れるためSocket
です。最初の数バイトを読み取って HTTP 要求を取得し、SSLSocket
.
s を試したとは言えませんがSocket
、TLS Client Hello を先読みし、必要に応じてプッシュバックする必要がありPushBackInputStream
ます。
(私が知る限り、グリズリーはこれSSLEngine
の代わりに使用SSLSocket
しています。)
ポートの統合を使用することは非常に珍しいことに注意してください。先読みのオーバーヘッドが何であるかはわかりません。代わりに複数のポートを使用しても、通常は問題ありません (さらに、HTTP と HTTPS ではデフォルト ポートが異なるため、2 つの URL の少なくとも 1 つでポートを指定する必要があります)。