Tomcat 9 http/2 个网络套接字

Tomcat 9 http/2 Websockets

我试图将 http/2 与我的网络应用程序一起使用。 问题是我的 websocket 连接在使用 http/2.

时似乎不起作用

我使用 javascript 文件 var webSocket = new WebSocket('wss://xxx.de:8443/urlto/websocket');

我在 server.xml 中的 Tomcat 连接器看起来像这样:

<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 连接没有问题。

未为 HTTP/2 定义 WebSocket 握手,因此如果您想使用 ws,则需要使用 HTTP/1.1.

有一个 RFC 试图在 HTTP/2 上定义 WS,但它从未完成。它已被替换为 https://datatracker.ietf.org/doc/draft-mcmanus-httpbis-h2-websockets/,我们必须看看是否会是这样。