2017-12-01 11 views
0

webappでhttp/2を使用しようとしていました。 問題は、http/2を使用しているときにwebsocket接続が機能していないようです。Tomcat 9 http/2ウェブソケット

私は var webSocket = new WebSocket('wss://xxx.de:8443/urlto/websocket');

ではJavaScriptファイルを使用してserver.xmlの私のTomcat Connectorは、次のようになります

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
      maxThreads="150" SSLEnabled="true" > 
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> 
    <SSLHostConfig> 
     <Certificate certificateKeyFile="/path/to/privkey.pem" 
        certificateFile="/path/to/cert.pem" 
        certificateChainFile="/path/to/chain.pem" 
        type="RSA" /> 
    </SSLHostConfig> 
</Connector> 

このようなサーバを起動すると、私はconnection closed before receiving a handshake response

というエラーを取得します

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />の部分が含まれていない場合、websocketは問題なく接続します。

答えて

2

HTTP/2ではWebSocketハンドシェイクが定義されていないため、wsを使用する場合はHTTP/1.1を使用する必要があります。

HTTP/2でWSを定義しようとしていたRFCがありましたが、完了しませんでした。それはhttps://datatracker.ietf.org/doc/draft-mcmanus-httpbis-h2-websockets/と置き換えられました。これが道になるかどうかを見極める必要があります。